SQL(2)

来源:互联网 发布:js map foreach 编辑:程序博客网 时间:2024/06/07 02:27
字符串连接CONCAT(XX,XX,XX..),里面为字段名。

集合运算(SET):
UNION是返回两个及两个以上查询结果并去掉重复部分((只留下一个)。
UNION ALL是返回两个及两个以上查询结果不去除重复部分。
INTERSECT(相交),返回两条查询结果的相交部分。
MINUS(相减),返回存在于第一个但不存在第二个中的结果。

从属运算(IN and BETWEEN)
IN:以前WHERE 字段1="xx" OR 字段1 = "xx"....,现在,WHERE 字段1 IN("xx","xx"...);同一字段中寻找你想要的几个。
BETWEEEM:以前WHERE 字段1>"10" AND 字段1<"30";现在WHERE 字段1 BETWEEM "10" AND "30"。也就是某一范围内。但是BETWEEN包括边界值,需要注意。

函数:
汇总函数:
COUNT(),该函数返回条数,SELECT COUNT(*) .....。
SUM(),返回列的和。
AVG()返回某一列的平均值。
MAX()某列最大值。
MIN()某列最小值。
后面的了解下
VARIANCE()方差。
STDDEV()标准差、

时间日期函数
ADD_MONTHS("当前日期",num),对当前日期加几个月。mysql中不适用。
LAST_DAY(),当月最后一天为几号。
MONTHS_BETWEEN(),返回两个日期中有多少个月,小数也很有可能会出现。也可能出现负数,负数情况是日前前后的原因。
NEW_TIME("字段名",当前时区,新时区)。换时区。mysql无此函数。
NEXT_DAY(date字段,"星期几大写英文")。返回与date字段的值同一个星期或下个星期的星期几。mysql不存在此函数。
SYSDATE,返回当前系统日期及时间。mysql不存在。

数学函数
ABS(),加绝对值。
CEIL()与FLOOR()返回的都是整数,不过,前者返回的是相等或更大,后者是相等或更小。在mysql中是CEILING()不是CEIL。
下面的了解下:
COS、SIN、TAN返回给定参数的三角函数值,默认为弧度制。还有COSH、SINH、TANH,这个不清楚。
EXP返回以给定参数为指数,e为底数的值。
LN 和 LOG均为对数函数,LN返回给定参数的自然对数,LOG俩参数,第二个参数为底数,
MOD(xx,XX),返回相除后的余数。
POWER  ,SIGN,SORT就先不考虑了。

字符函数,
INITCAP,将参数的第一个改为大写,其余为小写。
CONCAT,连接字符串
LOWER全变大写
UPPER全变小写
REPLACE,搜索后替换
SUBSTR剪切字符串
LENGTH返回长度


转换函数:
TO_CHAR转字符
TO_NUMBER转数字


order by  字段名 desc,也可将字段名改为列的序号
group by,是对列进行分组,然后可以跟汇总类函数(COUNT,SUM,AVG,MIN,MAX)一起连用。

汇总函数不能在WHERE子句中。不过在加了HAVING后可以用汇总函数,而且不用WHERE。HAVING一般使用的话是和group by一起使用的。‘


表的联合
交叉联合,一个表的每一行分别和另一个表的每行联合(一行对多行)。
当表联合后如果要指定特定的列进行查询的时候,如果俩表的字段有相同的时候就必须对表名设定别名,如何设置:From table1 tab1,table2 tab2....,现在就成了,SELECT tab1.id ,tab2.id.....

等值联合,就是加个WHERE判断等于的情况。
通常,根据给定的条件返回行数最少的表会作为驱动表-也就是基表。在查询中除基表以外的其它表通常是向基表联合以便更有效地获得数据。
不等值联合与其相反。

内部联合:
JOIN ON,如果table1 join table2 where XX = xx;
那么就是列增加了,条数由where控制。

外部右联合:
RIGHT JOIN ON,会返回右边所有的记录,如果左边没有对应的那么就为空
左联合和与其相对应,是返回左边符合where的记录。table1 RIGHT JOIN ON table2 where...

子查询:可以让你把查询的结果与另一个查询绑定在一起。通用语法格式:
SELECT * FROM TABLE1  WHERE TABLE1.SOMECOLUMN=(SELECT * FROM TABLE2 WHERE TABLE2.SOMELUMN  = SOMEVALUE)
还可以子查询嵌套,一个接一个。

在子查询中用IN,A IN (。。。)这样,就表示所有A在子查询中匹配的都可以查询出来。

EXISTS关键字,紧接着WHERE使用,后面跟着子查询。表示非空时返回true,否则返回false

ANY SOME用法一样,和IN有着区别,IN在其中几乎是等于,而ANY SOME还可以是< 、>。ANY,SOME是将每一行与前面主查询相对比,看子查询返回是false还是true。ALL是当所有结果均满足条件它才会返回true。ALL也常常起到否定作用,就是这么个意思,如果子查询到了,我用<>ALL将其给否定,那么主查询返回的就是除了子查询查询到的以外的。

插入单条:INSERT INTO TABLE (字段,,,,) VALUES (.....);
插入多条(从别的表中复制):INSERT INTO TABLE(字段名1,.2,..3,) SELECT 字段1,,..2,..3, FROM TABLE2....;

UPDATE TABLE SET 字段1 = ..[字段2=..] ....

DELETE FROM TABLE WHERE .....

在进行代码和数据库的结构设计时将你的数据结构与你当时的意图进行详细的记录是非常重要的,在数据库设计行业,称之为数据字典。

ALTER TABLE可以:
加入一列到已经存在的表中。ALTER TABLE table_name ADD coulumn_name data_typ;
修改已经存在的表中的某一列。ALTER TABLE table_name MODIFY column_name data_type;

DROP TABLE可以从数据库中删除一个指定的表以及与之相关联的索引和视图。

推荐方法,DROP TABLE 数据库名或工程名,表名。


SET TRANSACTION READ ONLY允许锁定一个记录集知道事物结束。

设置事物,CURD,rollback取消。rollback之前如果commit了,那就不能再回去了,因为事物已经被提交结束了。

数据库游标允许你选择一组数据,用过翻阅这组数据记录(通常称为数据集),检查每一个游标所在的特定的行。你可以将游标和局部变量组合在一起对每一个记录进行检查,当游标移动到下一个记录时来执行一些外部操作。
另外一个常见的用法是保存查询结果一杯以后使用。一个游标结果集通过执行SELECT查询来建立。如果在第一次建立了游标,那么以后重复使用的时候会比多次查询快得多。

静态SQL:指在程序中直接写入SQL代码。这些代码在运行时不能被更新。
好处:提高运行时的速度,经过编译错误检查。
缺点:灵活性差,需要更多的代码,需要更多的代码,对其他数据库系统来说使用起来不方便。
动态SQL:让程序员在运行时构建SQL语句并把这些语句提交给数据库引擎,引擎再将数据返回给程序变量。