赞
踩
SELECT 指定列/*
FROM 表名;
Tips:
一般情况下,最好不要使用通配符‘*’。
虽然
*
节省输入查询语句的时间,但降低查询和所使用的应用程序的效率。通配符的优势是:当不知道所需要的列的名称时,可以通过它获取它们。
在生产环境下,不推荐你直接使用 SELECT * 进行查询。
SELECT last_name AS name, commission_pct comm
FROM employees;
SELECT last_name "Name", salary*12 "Annual Salary"
FROM employees;
重命名一个列,可(不)使用AS,可(不)使用双引号
SELECT DISTINCT depatment
FROM employees;
#错误
SELECT * FROM ORDER;
#正确
SELECT * FROM `ORDER`;
使用着重号防止表中的字段、表名等和保留字、数据库系统或常用方法冲突
DESCRIBE employees;
或
DESC employees;
+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id | int(6) | NO | PRI | 0 | |
| first_name | varchar(20) | YES | | NULL | |
+----------------+-------------+------+-----+---------+-------+
各字段的含义:
+ - * / %
mysql> select 1+2; +-----+ | 1+2 | +-----+ | 3 | +-----+ 1 row in set (0.01 sec) mysql> select 1/2; +--------+ | 1/2 | +--------+ | 0.5000 | +--------+ 1 row in set (0.00 sec) mysql> select '5a'+2; -- a=1 +--------+ | '5a'+2 | +--------+ | 7 | +--------+ 1 row in set, 1 warning (0.00 sec) mysql> select 'a5'+2; -- a=0 +--------+ | 'a5'+2 | +--------+ | 2 | +--------+ 1 row in set, 1 warning (0.00 sec)
= !=/<> < > <= >=
in或者not in
in用于判断某个列的取值是否为指定的值,使用in运算符时指定的值是离散的数据,不是连续值
select * from tb_student where age in(18,28,15)
含义是 age=18 or age=28 or age=15
select * from tb_student where age not in(18,28,15)
含义是 age!=18 and age!=28 and age!=15
between and
用于判断数据是否在指定的范围内,连续值
select * from tb_student where score between 60 and 85;
like/not like
主要针对字符串类型数据进行模糊查询,通配符_和%
select * from tb_student where name not like '张%';
语法 | 说明 | |
---|---|---|
&&或and | a and b或者 a && b | 逻辑与,a和b都为true,则为true |
||或者or | a || b或者 a or b | 逻辑或,一个为true,则为true |
not或者! | not a或者!a | 逻辑非 |
mysql> SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL;
+----------+---------+------------+------------+
| 1 AND -1 | 0 AND 1 | 0 AND NULL | 1 AND NULL |
+----------+---------+------------+------------+
| 1 | 0 | 0 | NULL |
+----------+---------+------------+------------+
1 row in set (0.00 sec)
mysql> SELECT 1 OR -1, 1 OR 0, 1 OR NULL, 0 || NULL, NULL || NULL;
+---------+--------+-----------+-----------+--------------+
| 1 OR -1 | 1 OR 0 | 1 OR NULL | 0 || NULL | NULL || NULL |
+---------+--------+-----------+-----------+--------------+
| 1 | 1 | 1 | NULL | NULL |
+---------+--------+-----------+-----------+--------------+
1 row in set, 2 warnings (0.00 sec)
& | ^ ~ >> <<
聚集函数用于对一个集合中的数据进行处理,不是一行一行的数据
count统计行数 sum求和 max最大值 min最小值 avg平均值
语法:count([all/distinct] 列名称)
select count(*) from tb_student;
select count(1) from tb_student;
select count(distinct dept) from tb_student; -- 获取系的个数
mysql> select * from tb_student;
select count(dept) from tb_student; -- 进行计数统计时,null不参与统计
用于数值类型的列,不要用于其他类型。max min sum avg
mysql> select max(age) from tb_student; +----------+ | max(age) | +----------+ | 19 | +----------+ 1 row in set (0.00 sec) mysql> select min(age) from tb_student; +----------+ | min(age) | +----------+ | 16 | +----------+ 1 row in set (0.00 sec) mysql> select avg(age) from tb_student; -- null值不参与计算,除非使用空值处理函数 将其转换为确定数值才可以 +----------+ | avg(age) | +----------+ | 16.7143 | +----------+ 1 row in set (0.00 sec) mysql> select sum(age),max(age),min(age),avg(age) from tb_student;
可以使用group by子句对查询结果进行分组处理,经常会使用聚集函数
如果不使用分组,聚集函数则用于处理所有查询结果数据
如果使用分组,则分别作用于各个分组查询的结果数据
获取男女生的平均年龄
mysql> select sex,avg(age) from tb_student group by sex;
+------+----------+
| sex | avg(age) |
+------+----------+
| 1 | 17.0000 |
| 0 | 16.0000 |
| NULL | 16.0000 |
+------+----------+
3 rows in set (0.00 sec)
可以对分组进行条件选择
需要获取人数多余2人的不同性别学生的平均年龄
按照性别分组
要统计的组必须人数多余2人,小于等于2人的分组不进行显示处理
select sex,avg(age) from tb_student group by sex having count(1)>2;
只有满足条件的数据才会输出显示
最大区别在于:作用的对象不同
where子句用于基表或者视图,从中选择满足条件的元组
having子句用于分组,从多个分组中选择满足条件的分组
ORDER BY
SELECT 指定列
FROM 表名
ORDER BY 某一列 ASC[升序]/DESC[降序]
#ORDER BY 在SELECT 语句的结尾
#多列排序,按顺序以此排列
LIMIT[位置位移量] 行数
-- 前10条记录:
SELECT * FROM 表名 LIMIT 0,10;
或者SELECT * FROM 表名 LIMIT 10;
-- 第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;
-- 第21至30条记录:
SELECT * FROM 表名 LIMIT 20,10;
MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT 4,3;”返回的结果相同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。