查询

不等于: !=或者<>

避免重复数据查询

  SELECT DISTINCT * FROM 表

设置显示格式数据查询:

  SELECT CONCAT(ename,'雇员的年薪为:',sal*12) year

  year

  SMITH雇员的年薪为: 9600

(NOT) BETWEEN AND

  SELECT ename FROM t_employee WHERE sal (NOT) BETWEEN 100 AND 200

IS (NOT) NULL

  SELECT ename FROM t_employee WHERE sal IS (NOT) NULL

(NOT) IN(集合查询)

   SELECT ename FROM t_employee WHERE sal (NOT) IN (value1,value2,value3)

  IN时,集合有NULL不影响查询

  NOT IN时,集合有NULL则不会查询出任何结果

(NOT)LIKE(模糊查询)_匹配单个字符,%匹配0个或者更多字符

  SELECT ename FROM t_employee WHERE ename LIKE value|'A_'|'a%'

ORDER BY

  SELECT * FROM t_employee ORDER BY sal (ASC|DESC), ename ASC|DESC 

LIMIT 限制查询结果数量

  SELECT * FROM t_employee LIMIT (OFFSET_START),ROW COUNT  指定初始位置和数量

统计函数:COUNT(),AVG(),SUM(),MAX(),MIN()

  SELECT function(xxx) FROM t_name WHERE CONDITION

  表中没有任何记录,COUNT返回0,其他返回NULL

分组统计

  SELECT function(xxx) FROM t_name WHERE CONDITION GROUP BY ename  1对多,通过1查出多

GROUP_CONCAT

  SELECT GROUP_CONCAT(field) FROM t_name WHERE CONDITION GROUP BY field

  SELECT d_no GROUP_CONCAT(ename) names FROM t_name GROUP BY d_no

  d_no  names

  10  A,B,C,D

多个字段分组查询

  SELECT dno,time,GROUP_CONCAT(ename) names, COUNT(ename) FROM t_name GROUP BY dno,time

HAVING限定分组查询

  WHERE用来实现条件限制数据,不能对分组进行条件限制,应该使用HAVING

  SELECT function(xxx) FROM t_name WHERE CONDITION GROUP BY field1,field2 HAVING CONDITION

  SELECTdno,AVG(sal) FROM t_name WHERE CONDITION GROUP BY field1,field2 HAVING AVG(sal)>2000

多表查询

Union:把具有相同字段数目和字段类型的表合并到一起

  SELECT ... FROM...UNION SELECT ... FROM...

  UNION ALL:不去重复,即将两个结果全部显示

笛卡尔积:没有连接条件的表关系,两个表每行都互相连接一次

内连接:表关系的笛卡尔积的数据记录中,按相应字段值的比较条件进行选择生成一个新的关系

  自然连接:表关系的笛卡尔积中,首先根据表关系中相同名称的字段自动进行记录匹配,然后去掉重复的字段,只保留一个

  等值连接:根据笛卡尔积,重复列字段保留,且数据记录保留重复字段相等的行

  不等连接:类似上面,保留不等的行

外连接:在表关系的笛卡尔积中,不仅保留表关系中所有匹配的数据记录,还会保留部分不匹配的数据记录   OUTER JOIN...ON

  左外连接:等值连接+按左表匹配,右表没有的置NULL,即除了选择相匹配的数据记录,还包含关联左表中不匹配的数据记录,同行右表置NULL

    SELECT e.no, d.name FROM t_e e LEFT JOIN t_d d ON e.no = d.no

  右外连接:等值连接+按右表匹配,左表没有的置NULL,即除了选择相匹配的数据记录,还包含关联右表中不匹配的数据记录,同行左表置NULL

    SELECT e.no, d.name FROM t_e e RIGHT JOIN t_d d ON e.no = d.no

  全外连接:除了选择相匹配的数据记录,还包含关联左表和右表中不匹配的数据记录,同行没有的置NULL

    SELECT e.no, d.name FROM t_e e FULL JOIN t_d d ON e.no = d.no

内连接:可以用SELECT FROM WHERE实现同样要求

  自连接:表与自身进行连接

  等值连接:SELECT e.no, d.name FROM t_e e INNER JOIN t_d d ON e.no = d.no

  不等值连接:SELECT e.no, d.name FROM t_e e INNER JOIN t_d d ON e.no >|<|<=|>=|!= d.no

 连接查询性能很惨,所以尽量使用子查询,即嵌套查询,SELECT嵌套

posted on 2017-08-25 22:36  zawjdbb  阅读(126)  评论(0编辑  收藏  举报

导航