1.单表查询
1.1mysql的基本查询语句:
SELECT 属性列表 FROM 表名和视图列表
[WHERE 条件表达式 1]
[GROUP BY 属性名 1[HAVING 条件表达式 2]]
[ORDER BY 属性名 2[ASC|DESC]]
1.2 使用“ * ”查询所有字段
SELECT * FROM 表名 [where 条件]
1.3 使用指定字段
SELECT 字段名1,字段名2,字段名n FROM 表名 [where 条件];
1.4 使用in关键字
IN关键字可以判断某个字段的值是否在指定的集合中;
[NOT] IN(元素 1,元素 2,…,元素 n)
SELECT * FROM student WHERE stuid IN(2,3,4);
1.5使用between and 的范围
BETWEEN AND 关键字可以判断某个字段的值是否在指定的范围内。
[NOT] BETWEEN 取值 1 AND 取值 2
SELECT * FROM student WHERE age BETWEEN 18 AND 20;
1.6带 LIKE 的字符匹配查询
LIKE 关键字可以匹配字符串是否相等。“%”:匹配任意长度的字符串; “-”:只能匹配单个字符。
[NOT] LIKE ‘字符串’
SELECT * FROM student WHERE name LIKE ‘A%’; //任意长度
SELECT * FROM student WHERE name LIKE ’A_y’; //单个
1.7查询空值
IS NULL 关键字可以用来判断字段的值是否为空值。
IS [NOT] NULL
//查询电话号码为空的学生信息
SELECT * FROM student WHERE phone IS NULL
1.7用 LIMIT 限制查询结果的数量
指定一共显示多 少条记录;
SELECT * FROM TABLE_NAME LIMIT [初始位置], 记录数
//查询年龄最大的五名学生的信息
SELECT * FROM student
ORDER BY birthday //按照字段名排序
LIMIT 0, 5
2.聚合函数
常用聚合函数有:
1. SUM 求和
2. AVG 求平均值
3. MAX 和 MIN 求最大值/最小值
4. COUNT 计数(count(*))
另:可使用 DISTINCT 语句对重要数据进行过滤。
eg: SELECT DISTINCT subid FROM score;
总结一:HAVING 与 WHERE 区别
相同点:HAVING 和 WHERE 语句都是对查询结果进行筛选,其后都可跟条件判断。
不同点:1) HAVING 只能用于 GROUP BY 后,WHERE 不可用于 GROUP BY 后。
2) HAVING 后可使用聚合函数,WHERE 不可以
3) 作用时机不同,WHERE 对表数据进行筛选,HAVING 对分组后的数据进行筛选。
总结二:查询语句执行顺序:
WHERE -> GROUP BY-> 聚合-> HAVING -> ORDER BY -> LIMIT
3.多表查询
3.1交叉连接(CROSS JOIN)
交叉连接会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
可用 CROSS JOIN 或 JOIN 或“,”(英文逗号)将两个表进行交叉 连接;
注:在使用连接查询时,字段选取、连接条件和过滤条件可使用“表名.列名”的方式选择过滤 哪一个表的列。特别是对于两个表中具有相同列名的列,必须通过表名来指定。
SELECT * FROM 表1 CROSS JOIN 表2[where 条件]
3.2内连接
其语法如下: SELECT * FROM 表1 INNER JOIN 表2 ON 连接条件 [WHERE 条件]
注:内连接的效率要比交叉连接高。
3.3 外连接
外连接与内连接不同,内连接时,根据连接条件只保留两个表中有对应数据的记录;而外连接时, 当一个表中记录在 另一 个表中没有对应记录时,会生成一条与 NULL 值对应的记录。
外连接:内连接(LEFT [OUTER] JOIN)与外连接(RIGHT [OUTER] JOIN)
语法格式如下: SELECT * FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件 [WHERE 条件]
注:AS- 为表和字段起别名(as 一般可以省略,直接在表或字段的后面写上别名)