Sql 语句学习指南第1/2页
网络编程 2021-07-05 13:42www.168986.cn编程入门
为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。
1.在查询结果中显示列名
a.用as关键字select name as '姓名' from students order by age
b.直接表示select name '姓名' from students order by age
2.精确查找:
a.用in限定范围select from students where native in ('湖南', '四川')
b.between...andselect from students where age between 20 and 30
c.“=”select from students where name = '李山'
d.like:select from students where name like '李%' (注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令'%李%';若是第二个字为李,则应为'_李%'或'_李'或'_李_'。)
e.[]匹配检查符select from courses where o like '[AC]%' (表示或的关系,与"in(...)"类似,而且"[]"可以表示范围,如select from courses where o like '[A-C]%')
3.对于时间类型变量的处理
a.smalldatetime直接按照字符串处理的方式进行处理,例如
select from students where birth > = '1980-1-1' and birth <= '1980-12-31'
4.集函数
a.count()求和,如select count() from students (求学生总人数)
b.avg(列)求平均,如select avg(mark) from grades where o='B2'
c.max(列)和min(列),求最大与最小
5.分组group
常用于统计时,如分组查总数
select gender,count(sno)
from students
group by gender
(查看男女学生各有多少)
注意从哪种角度分组就从哪列"group by"
对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数,那么分组规则有届别(grade)、专业(mno)和性别(gender),所以有"group by grade, mno, gender"
select grade, mno, gender, count()
from students
group by grade, mno, gender
通常group还和having联用,比如查询1门课以上不及格的学生,则按学号(sno)分类有
select sno,count() from grades
where mark<60
group by sno
having count()>1
6.UNION联合
合并查询结果,如
SELECT FROM students
WHERE name like ‘张%'
UNION [ALL]
SELECT FROM students
WHERE name like ‘李%'
7.多表查询
a.内连接
select g.sno,s.name,c.coursename
from grades g JOIN students s ON g.sno=s.sno
JOIN courses c ON g.o=c.o
(注意可以引用别名)
b.外连接
b1.左连接
select courses.o,max(coursename),count(sno)
from courses LEFT JOIN grades ON courses.o=grades.o
group by courses.o
左连接特点显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。
左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
b2.右连接
与左连接类似
b3.全连接
select sno,name,major
from students FULL JOIN majors ON students.mno=majors.mno
两边表中的内容全部显示
c.自身连接
select c1.o,c1.coursename,c1.pno,c2.coursename
from courses c1,courses c2 where c1.pno=c2.o
采用别名解决问题。
d.交叉连接
select lastname+firstname from lastname CROSS JOIN firstanme
相当于做笛卡儿积
8.嵌套查询
a.用关键字IN,如查询李山的同乡
select from students
where native in (select native from students where name=' 李山')
b.使用关键字EXIST,比如,狼蚁网站SEO优化两句是等价的
select from students
where sno in (select sno from grades where o='B2')
select from students where exists
(select from grades where
grades.sno=students.sno AND o='B2')
9.关于排序order
a.对于排序order,有两种方法asc升序和desc降序
b.对于排序order,可以按照查询条件中的某项排列,而且这项可用数字表示,如
select sno,count() ,avg(mark) from grades
group by sno
having avg(mark)>85
order by 3
10.其他
a.对于有空格的识别名称,应该用"[]"括住。
b.对于某列中没有数据的特定查询可以用null判断,如select sno,courseno from grades where mark IS NULL
c.注意区分在嵌套查询中使用的any与all的区别,any相当于逻辑运算“||”而all则相当于逻辑运算“&&”
d.注意在做否定意义的查询是小心进入陷阱
如,没有选修‘B2'课程的学生
select students.
from students, grades
where students.sno=grades.sno
AND grades.o <> 'B2'
上面的查询方式是错误的,正确方式见下方
select from students
where not exists (select from grades
where grades.sno=students.sno AND o='B2')
11.关于有难度多重嵌套查询的解决思想
如,选修了全部课程的学生
select
from students
where not exists ( select
from courses
where NOT EXISTS
(select
from grades
where sno=students.sno
AND o=courses.o))
a.用as关键字select name as '姓名' from students order by age
b.直接表示select name '姓名' from students order by age
2.精确查找:
a.用in限定范围select from students where native in ('湖南', '四川')
b.between...andselect from students where age between 20 and 30
c.“=”select from students where name = '李山'
d.like:select from students where name like '李%' (注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令'%李%';若是第二个字为李,则应为'_李%'或'_李'或'_李_'。)
e.[]匹配检查符select from courses where o like '[AC]%' (表示或的关系,与"in(...)"类似,而且"[]"可以表示范围,如select from courses where o like '[A-C]%')
3.对于时间类型变量的处理
a.smalldatetime直接按照字符串处理的方式进行处理,例如
select from students where birth > = '1980-1-1' and birth <= '1980-12-31'
4.集函数
a.count()求和,如select count() from students (求学生总人数)
b.avg(列)求平均,如select avg(mark) from grades where o='B2'
c.max(列)和min(列),求最大与最小
5.分组group
常用于统计时,如分组查总数
select gender,count(sno)
from students
group by gender
(查看男女学生各有多少)
注意从哪种角度分组就从哪列"group by"
对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数,那么分组规则有届别(grade)、专业(mno)和性别(gender),所以有"group by grade, mno, gender"
select grade, mno, gender, count()
from students
group by grade, mno, gender
通常group还和having联用,比如查询1门课以上不及格的学生,则按学号(sno)分类有
select sno,count() from grades
where mark<60
group by sno
having count()>1
6.UNION联合
合并查询结果,如
SELECT FROM students
WHERE name like ‘张%'
UNION [ALL]
SELECT FROM students
WHERE name like ‘李%'
7.多表查询
a.内连接
select g.sno,s.name,c.coursename
from grades g JOIN students s ON g.sno=s.sno
JOIN courses c ON g.o=c.o
(注意可以引用别名)
b.外连接
b1.左连接
select courses.o,max(coursename),count(sno)
from courses LEFT JOIN grades ON courses.o=grades.o
group by courses.o
左连接特点显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。
左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
b2.右连接
与左连接类似
b3.全连接
select sno,name,major
from students FULL JOIN majors ON students.mno=majors.mno
两边表中的内容全部显示
c.自身连接
select c1.o,c1.coursename,c1.pno,c2.coursename
from courses c1,courses c2 where c1.pno=c2.o
采用别名解决问题。
d.交叉连接
select lastname+firstname from lastname CROSS JOIN firstanme
相当于做笛卡儿积
8.嵌套查询
a.用关键字IN,如查询李山的同乡
select from students
where native in (select native from students where name=' 李山')
b.使用关键字EXIST,比如,狼蚁网站SEO优化两句是等价的
select from students
where sno in (select sno from grades where o='B2')
select from students where exists
(select from grades where
grades.sno=students.sno AND o='B2')
9.关于排序order
a.对于排序order,有两种方法asc升序和desc降序
b.对于排序order,可以按照查询条件中的某项排列,而且这项可用数字表示,如
select sno,count() ,avg(mark) from grades
group by sno
having avg(mark)>85
order by 3
10.其他
a.对于有空格的识别名称,应该用"[]"括住。
b.对于某列中没有数据的特定查询可以用null判断,如select sno,courseno from grades where mark IS NULL
c.注意区分在嵌套查询中使用的any与all的区别,any相当于逻辑运算“||”而all则相当于逻辑运算“&&”
d.注意在做否定意义的查询是小心进入陷阱
如,没有选修‘B2'课程的学生
select students.
from students, grades
where students.sno=grades.sno
AND grades.o <> 'B2'
上面的查询方式是错误的,正确方式见下方
select from students
where not exists (select from grades
where grades.sno=students.sno AND o='B2')
11.关于有难度多重嵌套查询的解决思想
如,选修了全部课程的学生
select
from students
where not exists ( select
from courses
where NOT EXISTS
(select
from grades
where sno=students.sno
AND o=courses.o))
1
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程