SELECT 语句
SELECT[ALL|DISTINCT|DISTINCTROW]select_expr[,select_expr,...]FROM table_references // 数据来源[WHERE where_condition] // 数据的选择条件[GROUP BY {col_name|expr|position}[ASC|DESC],...[WITH ROLLUP]] // 对检索到的数据分组[HAVING where_condition] // 指定组的选择条件[ORDER BY {col_name|expr|position}[ASC|DESC],...][LIMIT {[offset,]row_count|row_count OFFSET OFFSET}] // 限制行数
例子:
select cust_name,cust_sex,cust_city from mysql_test.customers;
列的选择与指定:
1、定义并使用列的别名
selectcust_name,cust_address AS dizhi,cust_contactFROM mysql_test.customers;
2、替换查询结果中的数据
CASEWHEN 条件1 THEN 表达式1WHEN 条件2 THEN 表达式2...ELSE 表达式END [AS] column_alias
例子:
select cust_name,casewhen cust_sex='m' then '男'else '女'end as xingbiefrom mysql_test.customers;
3、计算列值
select cust_name,cust_sex,cust_id+100from customers;
聚合函数count 与 GROUP BY 联用
聚合函数是内置函数
| count | 求组中项数,返回INT类型整数 |
|---|---|
| max | 求最大值 |
| min | 求最小值 |
| sum | 返回组中所有值的和 |
| avg | 求组中值的平均值 |
| BIT_AND | 逻辑与 |
| BIR_OR | 逻辑或 |
| BIT_XOR | 逻辑异或 |
FROM 子句与多表链接查询
1、交叉链接,又称为笛卡尔积
SELECT * FROM table1 CROSS JOIN table2;// 下面是简写SELECT * FROM tbl1,tbl2;
2、内连接
SELECT some_columns FROM tbl1INNER JOIN tbl2ON some conditions;
例子:
select * from tbl_studentinner join tbl_scoreon tbl_student.studentNo=tbl_score.studentNo;
3、外链接
左外链接:
在FROM子句中使用关键字 LEFT OUTER JOIN 或 LEFT JOIN
右外链接
在FROM子句中使用关键字 RIGHT OUTER JOIN 或 RIGHT JOIN
数据查询
WHERE 子句与条件查询
1、比较运算符
| = | 等于 |
|---|---|
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| <=> | 不会返回 unknown |
2、判定范围
当查询的过滤条件被限定在某个范围时,可以使用关键字 BETWEEN (与AND连用)
select * from customerswhere cust_id between 903 and 912;
3、关键字 IN
使用关键字 IN 可以指定一个值的枚举表,该表中会列出所有可能的值
例子:查询cust_id为903,906,908的客户信息
select * from customerswhere cust_id in(903,906,908);
4、关键字 LIKE
在where子句中有时候我们需要查询包含xxx 字符串的所有记录,这时候就需要用到运算符 like。
SELECT column_name from table_name WHERE column_name LIKE '%value%'
说明:
- LIKE 子句中的 % 类似于正则表达式中的 * ,匹配任意0个或多个字符
- LIKE 子句中的 _ 匹配任意单个字符
- LIKE 子句中如果没有 % 和 _ ,就相当于运算符 = 的效果
例如:查找所有姓张的人
select user_name from mt.userwhere user_name like '张%';
5、判定空值
expr IS [NOT] NULL
例子:
select * from customerswhere cust_address is null;
子查询
- 表子查询
- 行子查询
- 列子查询
- 标量子查询
1、结合关键字 IN 使用子查询
示例:查询任意所选课程成绩高于80分的学生的学号和姓名WHERE expr [NOT] IN(subquery)
select studentNo,studentNamefrom tb_studentwhere studentNo in(select studentNo from tb_score where score > 80); // studentNo 是外键
2、结合比较运算符的子查询
expr {=|<|<=|>|>=|<=>|<>|!=} {ALL|SOME ANY}(subquery)
3、结合关键字 EXISTS 使用子查询
子查询的结果集不为空,则返回 true,否则返回 falseEXISTS(subquery)
GROUP BY 子句 与 分组数据
GROUP BY 子句常与聚合函数一起调用
示例GROUP BY {col_name|expr|position}[ASC|DESC]...[WITH ROLLUP];
select address,sex,count(*) as '人数'from customersgroup by address,sexwith rollup
HAVING 子句
HAVING子句 用于过滤分组(与GROUP BY 连用),可以包含聚合函数,在数据分组后过滤ORDER BY 子句(排序)
示例:ORDER BY {col_name|expr|position}[ASC|DESC],...
select name,sex from custorder by name desc,address desc;
LIMIT 子句
使用LIMIT 子句限制被select语句返回的行数
示例:LIMIT {[offset,]row_count|row_count OFFSET offset}
select cust_id,cust_name from custorder by cust_idlimit 4,3; // 从第5行开始,返回3行// 另一种写法limit 3 offset 4; // 返回3行,初始值第5行
