select <子句1>
    from <子句2>
        [where<表达式1>]
        [group<字句3>]
        [having<表达式2>]
        [order by<字句4>]
        [limit<子句5>]
        [union<操作符>]

1.查看数据的两种方法

select 字段名 from 表名;
  • 查看多指定的字段
select 字段名,字段名 from 表名

2.查看数据并进行筛选(where)

select 字段名 from 表名
where 字段名=字段值;

例如:

select name from student
where xb='f';

3.不查看重复记录(distinct),空值,非空值

  • 不查看重复记录,多字段无效
select distinct 字段名 from 表名;
  • 查看含有空值的记录
select *from 表名
where 字段名 is null;
  • 查看不为空的学生信息
select *from 表名
where 字段名 is not null;

5.查看指定行(limit)

select *from 表名 limit 3;

6.模式匹配(like)

%百分号匹配0个或者多个任意字符
_下划线匹配单个任意字符
select *from 表名
where 姓名 like '张%';
select *from 表名
where 姓名 not like '张%';
select *from 表名
where 姓名 like '%张%';

regexp

^插入号匹配字符串的开始部分
$美元匹配字符串的结束部分
.匹配字符串(包括回车和新行)
*乘号匹配-0个或多个任意字符
+加号匹配单个或多个任意字符
?问号匹配0个或单个任意字符
()括号匹配括号里面的内容
{n}大括号匹配括号前的内容出现n次的序列
select *from 表名
where 姓名 regexp '^张';

select *from 表名
where 姓名 regexp '张*';

6.范围查询(between and)

select *from 表名
where 成绩 between 80 and 100;
  • in语句指定列表查询条件
select *from 表名
where 开课学期 in('1','2');

7.逻辑运算符查询

not否定,逻辑非
and连接,都满足时返回真,类似逻辑与&&
or类似逻辑或
xor只有一个满足时返回真,两个都满足或不满足返回假
select *from 表名
where 成绩>=80 and 成绩<=100;

8.order by 子语句(排序)

select *from 表名
where 课程号='07003'
order by 成绩 desc;

- 单列排序

select *from 表名 order by 字段名1;

- 多列排序

select *from 表名 order by 字段名1,字段名2;

- 指定排序方向

select *from 表名 order by 字段名1,字段名2 desc;
会对字段1进行默认的升序排序,当有重复的值时候,会对字段2进行排序,因为字段2已经指定了排序方式为降序。
所以字段1默认的升序排序,字段2指定的降序排序

9.group by 子语句(聚合函数)

sum()返回一个数值列或计算列的总和
avg()返回一个数值列或计算列的平均值
min()返回一个数值列或计算列的最小值
max()返回一个数值列或计算列的最大值
count()返回满足select语句中指定条件的记录数
count(*)返回找到的行数

- 进行分组

select 要分组的字段名 from 表名 group by 要分组的字段名;

select 要分组的字段名 as 别名 from 表名 group by 要分组的字段名;

count()的用法

select count(*) from 表名;

select count(字段名) from 表名;

- 分组查询

select 性别,count(*) from 表名 group by 性别;

select 性别 as 人数,count(*) as  人数 from 表名 group by 性别;

如果性别字段中有空值,还可以用这种方式
select 性别 as 人数,count(性别) as  人数 from 表名 group by 性别;
它会对性别进行分组,但是对于空值的那一组不会返回数值

having(过滤)

select 性别 from 表名 group by 性别 having xb is not null;
对字段“性别”进行分组,但是不对空值进行分组

select 性别 from 表名 group by 性别 having 性别 is  null;
对字段“性别”进行分组,只对空值进行分组
02-11 08:11