1.查询数据表记录
select 字段1,字段2,字段3... from 数据表 查询所选字段
或者
select * from 数据表 查询所以数据
PS:这里的sbirth字段是datetime型得符合标准
2.为列取别名
列名 as 别名
给sno起别名为学生学号,并显示记录
列名 别名
now() 指的是当前查询时间
3.使用distinct关键字取消查询重复结果
distinct
查询不重复sgender
套用别名
4.where限定查询条件
where
例:查询性别为男的学生
5.模糊查询
列名 (not)like '模式字符串'
通配符
%:匹配任意长度字符串
_:匹配任意单个字符
下面举个例子
查询sno前面为2218的记录
查询sno前面为2218且性别为嬲的记录
6.order by 子句
对结果进行重新排序,放在语句最后
select [all|distinct] 要查询的内容
from 表名
[where 条件表达式]
order by 列名[asc|desc];
asc 使用升序排列
desc 使用降序排列
order by子句一定写在where子句后
栗子:查询性别为男且按照学号降序排序
7.使用集合函数
count([distinct|all]列表达式):计算一列值的个数
count(*):返回有多少行,包括有空值的行
sum([distinct|all]列表达式):计算一列数据总和(此列为数值型,如果为“1234”也可以)
avg([distinct|all]列表达式):计算一列数据平均值(此列为数值型)
max([distinct|all]列表达式):计算一列最大值(此列为数值型)
min([distinct|all]列表达式):计算一列最小值(此列为数值型)
栗子1:下列表示最小学号
栗子2:
8.group by 子句
对查询结果按列的值进行分组,列值相同的放在同一组。这一组里面该列的值都相同,其他的列的信息也有
当group by和集合函数配合使用时,将对各组分别运用集合函数
select [all|distinct] 要查询的内容
from 表名
[where 条件]
group by 列名
[having 条件];
下列两个栗子:
count(*) 是集合函数,所以不必要
having子句只能出现在group by子句后面,对于分组后的结果进行条件筛选
9.内连接查询
将符合条件的两个表相应的记录连接起来形成一个新的表。
select 列名
from 表名1[inner] join 表名2
[on 表名1.列名 比较运算符 表名2.列名]
或者
select 列名
from 表1,表2
where 表名1.列名 比较运算符 表名2.列名
/*
*/
输出在学生信息表sno和studentinfo中sno一样的记录并连接起来,且输出成绩为90的记录
另一种方法
别名只要取了,在这个全局皆可使用
10.外连接
将两个表根据条件连接起来合成一个表,又分成下列三种情况:
左外连接 关键字left join
关键字左边的表的信息会被全部打印出来,并且接上右边表符合条件的记录,而如果左边的表中记录不含右边表字段的信息,那么就打印为null。
我先打印出两个表的信息便于观察
例子:
右外连接 right join
关键字右边的表的信息会被全部打印出来,并且接上左边表符合条件的记录,而如果右边的表中记录不含左边表字段的信息,那么就打印为null。
select 字段
from 表1 left|right join 表2
on 表名1.列名 比较运算符 表名2.列名
全连接 full join
两表的全部信息都被打印,并且连成一个表
在mysql中没有full join用下面语句模拟
union关键字表示对两个相同的记录合并,不相同的独立,并构成一个表。
运用union所以下面自己实现
求笛卡尔积表
[a1,a2,a3...an][b1,b2,b3...,bn]=a1*b1+a2*b2+a3*b3...+an *bn
11.自连接
由于是自己和自己连接,所以要起别名
下面举个栗子
选择与22185556同性别的学生信息
这个时候打印s2的字段就行了
12.子查询
(1)any
可以理解为对于每一个父子句中的记录和每一个子句中的记录得到的结果比较,只要有一个符合条件那么就返回true;
any(子句)
查询sgrade等于90的学生的性别
法1
法2:
或
但不可
法1和法2比法1更快
法1是用studentinfo的记录和学生信息中sgrade=90的记录比较,比较并选出sno一样的记录
法2是先内连接,然后从合并的表中选择符合条件的记录
(2)all
可以理解为对于每一个父子句中的记录和每一个子句中的记录得到的结果比较,只有全部符合条件才就返回true;
/*
*/
接下来查询表studentinfo中符合sclass等于学生信息每一条符合sgrade=90记录的sclass的记录
(3)[not]in
和=any(子句)类似,但any可以<any(...) 或 >any(...)等等
not in 和 <>any !=any都等价
(4)(not)exists
exist如果存在子句得出结果的表中不为空的话,返回为true
not exist如果存在子句得出结果的表中不为空的话,返回为false
栗子:如果studentinfo表中存在sgender='嬲',那么就输入studentinfo表的全部记录
如果studentinfo表中不存在sgender='嬲',那么就输入studentinfo表的全部记录
如果studentinfo表中不存在sgender='女',那么就输入studentinfo表的全部记录