MySQL:八、单表操作---查

查询所有符合条件的记录的指定字段

1. 查询整张表(注意返回字段的顺序和表的字段的顺序一样)
SELECT * FROM tb_students;
2. 以网格形态显示数据表内容
SELECT * FROM tb_student\G;
3. 指定查询的字段(注意顺序)
SELECT english, math, chinese FROM tb_students;

限制数量

1. 查询前3条
SELECT * FROM tb_students LIMIT 3;
2. 指定从哪一行开始查询(从第2条开始查询5条记录(SELECT是从0开始的))
SELECT * FROM tb_students LIMIT 1,5;

注意:LIMIT限制的个数超过表的记录的个数,则返回能查询到的记录。LIMIT指定开始查询的下标超过表的记录的个数,则返回空。

分组排序

1. 排序(默认是字母升序顺序,升序:ASC,降序:DESC)
SELECT name FROM tb_students GROUP BY name ASC;
2. 多个排序条件(当第一个条件相同时,按下一个条件排序)
SELECT chinese FROM tb_students GROUP BY chinese,math ASC;
3. 分组条件
SELECT chinese FROM tb_students GROUP BY chinese HAVING chinese > 50;

注意:很奇怪,只能返回排序条件的字段

查找不同的值

SELECT DISTINCT chinese,math,english FROM tb_students;
注意:DISTINCT不仅作用跟在DISTINCT后面的字段,还作用于SELECT的所有字段,除非SELECT的字段完全相同,否则返回。

条件查询

1. 单条件查询
SELECT * FROM tb_students where chinese>60;
2. 多条件查询
• 条件都满足
SELECT * FROM tb_students WHERE chinese=100 AND math=100 AND english=100;
• 条件至少满足一个
SELECT * FROM tb_students WHERE name="zhao" OR name="qian" OR name="sun";
• 混合
SELECT * FROM tb_students WHERE (name="zhao" OR name="qian" OR name="sun") AND chinese=100;

注意:
HAVING和WHERE的区别:WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

查询条件

1. 比较运算符
相等:=或者<=> (注意:不是==)
不相等:!= 或 < > 
2. BETWEEN 在指定的两个值之间
SELECT * FROM tb_students WHERE chinese BETWEEN 0 AND 100;
3. IS NULL 为NULL值
SELECT * FROM tb_students WHERE chinese IS NULL;

指定条件范围

1. IN在范围内(至少满足一个,和OR类似,比OR快)
SELECT * FROM tb_students WHERE name IN("zhao", "qian", "sun", "li");
2. NOT IN 不在范围内(一个都不满足)
SELECT * FROM tb_students WHERE name NOT IN("zhao", "qian", "sun", "li");
3. NOT 否定
SELECT * FROM tb_students WHERE NOT name="zhao";

通配符

1. % :任何字符出现任意次数(不会匹配NULL)
SELECT * FROM tb_students WHERE name LIKE "zh%";
2. _ :匹配单个字符
SELECT * FROM tb_students WHERE name LIKE "zh__";
注意:失败
3. []:匹配指定位置(通配符的位置)的一个字符
SELECT * FROM tb_students WHERE name LIKE "zh[ao][ou]";
4. ^:否定
SELECT * FROM tb_students WHERE name LIKE "zh[^a]%";

算术函数

1. ABS() 数的绝对值
2. SQRT() 数的平方根
3. EXP() 数的指数值
4. PI() 圆周率
5. SIN() 角度的正弦
6. COS() 角度的余弦
7. TAN() 角度的正切
8. DIV() 整数除法
9. MOD() 取模
10. POWER() 幂运算
11. ROUND(m,n) 保留小数点后n位
12. TRUNCATE() 数字截取,不进行四舍五入
13. CEIL() 进一取整
14. FLOOR() 舍一取整

SELECT name,ABS(chinese) FROM tb_students;
SELECT DIV(chinese, 2) AS div_chinese FROM tb_students;

聚集函数(对某些行进行处理)

1. AVG() 某列的平均值
2. COUNT() 某列的行数(忽略指定列的值为空的行,COUNT(*)不忽略)
3. MAX() 某列的最大值(数值或日期取最大值,文本取最后一行)
4. MIN() 某列的最小值
5. SUM() 某列值之和(忽略NULL)

SELECT AVG(chinese) AS avg_chinese FROM tb_students;
SELECT MAX(DISTINCT chinese) FROM tb_students;

日期时间

1. NOW() 当前日期时间(年月日时分秒)
2. CURRENTDATE() 当前日期   失败
3. CURRENTTIME() 当前时间
4. DATE_ADD() 日期变化
5. DATEDIFF() 日期差值(只能算天数,不能算年月时分秒)
SELECT DATEDIFF('2019-01-02','2019-01-01'); 天数相差1天,前一个参数减后一个参数
SELECT DATE_ADD('2019-01-01' INTERVAL 1 DAY); 失败

字符串

1. CONCAT字符连接
SELECT CONCAT(name, name) AS str FROM tb_students;
2. CONCAT_WS指定分割字符
SELECT CONCAT_WS('+', name, name) AS str FROM tb_students;
3. FORMAT数字格式化
保留小数点后两位,四舍五入
SELECT FORMAT(chinese,2) AS str FROM tb_students;
4. LOWER() 转小写
5. UPPER() 转大写
6. LEFT(str,n) 字符串左边n位
7. RIGHT(str,n) 字符串右边n位
8. LENGTH() 字符串长度(包含空格)
9. LTRIM() 删除左侧空格
10. RTRIM() 删除右侧空格
11. TRIM() 删除两侧空格
12. SUBSTRING(str,m,n) 字符串截取,从第m位开始,取n位
13. [NOT] LIKE 模式匹配,%任意字符,_任意一个字符
14. REPLACE(str,m,n) 字符替换,把m替换为n

子查询

1. 查询结果作为查询条件
SELECT name, chinese, math, english FROM tb_students WHERE name =(SELECT name FROM tb_students WHERE chinese=100);
2. 可以将查询结果插入指定数据表
INSERT [INTO] tb_name [(col_name, )] SELECT...
区别在于可以使用子查询,插入一条
INSERT [INTO] tb_name SET col_name={expr | DEFAULT}
注意字段的顺序和别名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值