单表查询:
SELECT [DISTINCT] *|{column1, column2. column3…} FROM tablename;
select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
查询全部的行和列:select * from student;
查询指定的列:select name from student;
查询多个列:select stuid,name,sex from student;
使用别名:select name AS 姓名,sex AS 性别 from student;
Select五种子句:
Where条件查询:
查询学号为4的学生信息
SELECT * FROM student WHERE stuid=4;
between... and...在两个值之间
查询出生日期在1995-07-14到1995-07-16出生的学生信息
SELECT * FROM student WHERE birthday BETWEEN '1995-07-14' AND '1995-07-16';
in 在什么里面
SELECT * FROM student WHERE birthday in ('1995-07-14','1995-07-15','1995-07-16');
not 查询出生日期不在1995-07-14到1995-07-16出生的学生信息
SELECT * FROM student WHERE birthday not in('1995-07-14','1995-07-15','1995-07-16');
LIKE 像 喜欢(模糊查询)
查询姓张的学生信息
SELECT * FROM student WHERE name LIKE '张%';
查询姓名以张结尾的
SELECT * FROM student WHERE name LIKE '%张';
查询姓名中包含四的学生信息 %四%
SELECT * FROM student WHERE name LIKE '%四%';
_:代表一个字符
查询姓张且姓名为两个字的学生信息
SELECT * FROM student WHERE name LIKE '张_';
查询成绩为空的成绩编号 is null 为空
SELECT scoid FROM score WHERE socre is NULL;
AND
查询性别是男并且班级编号是1的学生信息
SELECT * FROM student WHERE sex='男' AND cid=1;
OR
查询性别是男或者班级编号是1的学生信息
SELECT * FROM student WHERE sex='男' OR cid=1;
聚合函数
SELECT * FROM score;
查询学号为1的学员的平均成绩 AVG([DISTINCT] expr)
SELECT avg(socre) AS 平均成绩 FROM score WHERE stuid=1;
COUNT(expr) : 统计参加了科目1考试的学生数量
SELECT COUNT(*) AS 学生数量 FROM score WHERE subid=1;
查询参加科目一考试的所有学生成绩总和
SELECT SUM(socre) FROM score WHERE subid=1;
查询科目一最高分和最低分
SELECT MAX(socre) AS 最高分,MIN(socre) AS 最低分 FROM score WHERE subid=1;
Group分组查询:
根据每个科目编号查询每个科目的平均成绩
SELECT AVG(socre) FROM score GROUP BY subid;
Having筛选:
having 针对查询结果起作用,where 针对表中真真正正存在的列起作用
SELECT subid,AVG(socre) AS 平均成绩 FROM score GROUP BY subid HAVING AVG(socre)>60;
Order by排序:
查询学生信息并按照班级编号升序(默认是asc)
SELECT * FROM student ORDER BY cid ASC;
Limit限制结果条数:
LIMIT(数据的坐标,显示多少条) 数据库的坐标从0开始
查询年龄最小的五名学生信息
SELECT * FROM student ORDER BY birthday DESC LIMIT 0,5;
五种子句的编写顺序:
SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …limit
多表查询:
等值连接:
查询张三Java的考试成绩,显示学生姓名,科目名,成绩,班级名
1.把表链接成大表
SELECT `name`,subname,socre,cname FROM student,classinfo,score,`subject` WHERE
2.确定连接条件
student.cid=classinfo.cid AND student.stuid=score.stuid AND score.subid=subject.subid
3.筛选条件
AND name='张三' AND subname='Java';
INNER JOIN:内连接
获取姓名为Jim的学生的所在班级,显示学生姓名,科目名,成绩,班级名
1.把几个表链接成一个大表
SELECT stuid,`name`,student.cid,cname FROM student INNER JOIN classinfo
2.确定连接条件
ON student.cid=classinfo.cid
3.确定筛选条件
WHERE name='Jim';
左连接:LEFT JOIN
查询所有学生课程的考试成绩,查询结果保留学生ID、姓名、性别、课程ID、成绩
SELECT student.stuid,`name`,sex,subid,socre FROM student LEFT JOIN score ON student.stuid=score.stuid;
右连接:right join
SELECT student.stuid,`name`,sex,subid,socre FROM student RIGHT JOIN score ON student.stuid=score.stuid;
左外连接:以左表为准,去右表找匹配的数据,如果找不到匹配,用null填充
右外连接:以右表为准,去左表找匹配的数据,如果找不到匹配,用null填充
内连接:左表和右表的交集,如果匹配成功,拿出来,匹配不成功丢掉