我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论。
一、操作符
1、比较操作符
- 相等 =
select * from students where s_id='J16040252'
- 不相等 != or <>
select * from students where s_id!='J16040252'
- 小于和大于 < or >
- 比较操作符的组合 <= or >=
select * from students where age > 18
select * from students where age <=18
2、逻辑操作符
- IS NULL:用于和NULL值进行比较。
select * from students where height is null
select * from students where height is not null
- BETWEEN:定位最大值与最小值之间;语法: 列 BETWEEN 最小值 and 最大值。
select * from students where age between 18 and 28
select * from students where age NOT between 18 and 28
- IN 用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中的一个值相匹配时返回true。
select * from students where s_id IN ('J1609004','J1603025')
select * from students where s_id NOT IN ('J1609004','J1603025')
- LIKE 用于通配符把一个值与类似的值进行比较;
SELECT * from students where s_name like '%法宝%'
- 百分号:(%)没有字数限制 下划线(_) 一个下划线表示一个字符。
select * from students where s_name like '_带着%'
select * from students where s_name not like '_带着%'
- EXISTS 用于搜索指定表里是否存在满足特定条件的记录。简单说如果查询的表里有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件
select * from students where exists (select null)
ALL、SOME、和ANY操作符
3、链接操作符
- AND 左右的条件都为真是返回真(与);
- OR 一个为真就返回真(或);
select * from students where s_name like '%小和尚%' and s_name like '1%'
select * from students where s_name like '%小和尚%' or age >20
4、算数运算符 a+b a-b a*b a/b a%b
加法、减法、乘法、除法、算术操作操作符的组合
select * from students where age+160 > height
5、求反操作符
不相等
NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL
NOT EXISTS
二、关键字
1、from where
语法:select 字段列表 from 表名 where 条件
- from子句:指定查询数据的表
- Where(条件查询):用于给查询添加条件,从而去除用户不需要的数据。
Where后边跟的条件值只有true 或false,从而限制我们查询中获取的数据。
2、order by 排序
a、order by 排序,默认为升序(ASC) 降序(DESC)
b、语法: select * from 表名 [where 条件] order by 字段1 [asc | desc],字段2 [asc | desc];
select * from students s where 1=1 ORDER BY s.s_age;
select * from students s where s.s_age>18 ORDER BY s.s_age DESC;
select * from students order by age desc;
select * from students order by age asc,height desc;
注意: SQL排序是基于字符的ASCII排序,数字0-9会按其字符值进行排序,并且位于A-Z之前。
3、limit 限制结果条数
语法:select * from 表名 [where 条件] limit 起始值,要取的条数。
limit[offset,NUM] 在哪个位置开始取多少个结果
- OFFSET 代表位移 如果被省略则代表0开始
- NUM 代表可以取多少条
select * from students s limit 1,2; 从第一条开始取两条数据。
注意:如果limit 后面只有一个参数,则参数代表是num,表示取多少条数据。
4、group by 分组
a、与select语句配合使用,把相同的数据划分为组。在select语句里,group by子句在where条件之后,在order by 子句之前。
b、语法:Select 列名1,列名2 from 表名 where 条件 group by 列名1,列名2 order by 列名1 [asc | desc],列名2 [asc | desc]
应用:
1、统计某个字段在结果集中所占的数量。
注意: 被选中的字段(查询中select之后的字段列表)必须在group by子句里引用过,如果要出现其他值必须是结合聚合函数(avg,max,min,sum和count)使用 。
select sex,max(age) from students group by sex;
select sex,age,max(height) from students group by sex,age;
注意:
1、聚合函数会使查询结果的数据变少,例如
select class_id,max(age) from students
无论有多少学生查询结果只有一条,class_id的值为第一个学生的class_id(不一定是age最大的那个),max(age)查出所有学生中年龄最大的值,两个值可以来自不同学生。
2、加上group by就不同了
select class_id,max(age) from students group by class_id
这段语句的数量和班级的数量(class_id为班级表的主键)一致,并且class_id,max(age)一定来自同一个学生。
总结: 当group by和聚合函数结合使用时,可以理解为,group by先把数据分类,然后聚合函数在这么多类数据中聚合数据,有多少类数据结果就有多少条数据。
5、having 筛选
a、该子句在select 语句里与group by 子句联合使用时,用于告诉group by子句在输出里包含那几个分组。Having 对于group by 的作用相当于where对于select的作用。
b、语法:Select 列名1,列名2 from 表名 where 条件 group by 列名1,列名2 Having 条件 order by 列名1,列名2
注意: Having 子句必须跟在group by子句之后,在order by 子句之前。
例:
SELECT
product_name,
sum(sale) 销售额,
count(1) 销售数量,
avg(sale) 售价平均值
FROM
saleDetails
GROUP BY
product_name having 销售额>4000 order by 销售额 desc
having效果等同于如下
select * from (SELECT
product_name,
sum(sale) 销售额,
count(1) 销售数量,
avg(sale) 售价平均值
FROM
saleDetails
GROUP BY
product_name ) p where 销售额>4000