SQL 基本查询语句
这篇博客主要介绍SQl基本查询语句
下面是查询基于的表
Student表
SC表
Course表
下面是具体的代码
1.创建表CREATE TABLE Student( //创建学生表 Sno CHAR(15) PRIMARY KEY, //指定主码Sname CHAR(20) UNIQUE, //唯一性约束条件Ssex CHAR(6),Ssage CHAR(6),Sdept CHAR(6))CREATE TABLE Course( //创建课程表Cno CHAR(20) PRIMARY KEY,Cname CHAR(20), Cpno CHAR (20),Ccredit CHAR(10)FOREIGN KEY (Cpno) REFERENCES Course(Cno) //外码的大小必须和依赖的码大小相同,否则会出现不一致的现象,无法创建外码)CREATE TABLE SC //创建选课表(Sno CHAR(15),Cno CHAR(20),Grade CHAR(5)PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno))
1单表查询1.1 查询表中的某一列SELECT 列名FROM 表名eg:SELECT Sno,Sname,Sdept //查询学生学号,姓名,系FROM Student
1.2 查询经过计算的值SELECT 2017-Ssage '年龄' //查询学生的年龄,由于是计算值,所以计算完成后没有表名。需要额外的加入表名FROM Student
1.3 查询表中元祖SELECT DISTINCT Sno //查询选修课的学号,用distinct消除重复FROM SC
1.4 查询满足条件的元祖常用的满足条件的元祖有,比较>,<,=,<>,确定范围的BETWEEN AND,NOT BETWEEN AND,确定集合的IN,NOT IN,字符匹配的LIKE,NOT LIKESELECT Sno,Sname,SsageFROM StudentWHERE Sno>19 查询年龄大于19的, WHERE Ssage BETWEEN 19 AND 20 //查询年龄在 19到20之间的SELECT Sno,Sdept //查询在IS和CS系的学生FROM Student WHERE Sdept IN('IS','MA') //IN和等于的区别, 当IN里面只有一个元素的时候,和=是等价的,其余不等价字符匹配查询SELECT Sname,SnoFROM StudentWHERE Sname LIKE '李%' //%号查询是匹配任意长度, _划线查询是匹配单个字符长度SELECT Sname,Sno //如果出现like后面有和_一样的符号,需要用转义字符来区分FROM StudentWHERE Sname LIKE '李&_勇' ESCAPE '&'
1.5 ORDER BY 语句按一个或者多个属性进行排列,ASC升序,DEC降序,默认升序SELECT Sno,GradeFROM SCORDER BY Grade DESC
1.6 聚集函数聚集函数是数据库提供的一组用于计算的函数,它有COUNT(统计数量),SUM(计算总和),AVG(求平均值),MAX(求最大值),MIN(求最小值),SELECT COUNT(Sno) '人数' //求人数FROM Student
1.7 GROUP BY GROUP BY 是对聚集函数的细化,如果没有GROUP BY,聚集函数作用的是整张表,有了GROUP BY 可以按照分组来进行划分SELECT Cno,COUNT(Sno) '人数' //查询选修各门课的人数,SELECT后面的元素,必须在group by 里面,或者 聚集函数里面FROM SCGROUP BY Cno
1.8 HAVING和WHERE的区别SELECT Sno //查询选修课大于三门课的同学的学号FROM SCGROUP BY SnoHAVING COUNT(Sno)>=3HAVING作用于表或视图。WHERE作用于分祖。2 连接查询当涉及多个表的查询的时候,可以采用连接查询
2.1 等值连接,非等值连接,自然连接等值连接是两张表里面找出相等的两列自然连接是把重复的列去掉SELECT Student.*,SC.Cno,SC.Grade //这是自然连接,表中没有重复的列。如果把SC换成SC.*,那么就是等值连接FROM Student,SCWHERE Student.Sno=SC.Sno
2.2 自身连接如果一张表自己和自己相连,那么就是自身连接,自身连接的时候必须起别名来区分第一张表和第二张表。因为涉及两张表的,所以他们的同名属性要加别名区分。SELECT First.Cno,First.Cname,Second.Cno,Second.Cname //查询每一门课程的先行课,这里用Second.Cno而不用Second.Cpno可以避免选修课为空的情况FROM Course First,Course SecondWHERE FIRST.Cpno=Second.Cno
2.3 外连接普通连接只会把满足条件的元组输出,而外连接可以把不满足条件的元组也输出。如输出学生选修课的成绩,普通连接只是会输出有成绩的学生,外连接可以输出没有成绩的学生外链接分为左外连接(列出左边的所有元组),右外链接(列出右边的所有元组),全连接(列出左边右边全部的元组) SELECT Student.Sno,Ssex,Sdept,Cno,GradeFROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.SnO)
2.4 复合条件连接,多表连接连接的时候where语句有好多条件,中间用AND连接。 多表连接和复合条件连接有相似的地方,比如三张表连接,连接的时候,两张表两张表的连接,最后用AND连接起来SELECT Student.Sno,SnameFROM Student,SCWHERE Student.Sno=SC.Sno AND Grade>90
3 嵌套查询一个SELECT-FROM-WHERE是一个查询块,将一个查询块放在另一个查询的where或者,having里,为嵌套查询相关子查询,不相关子查询 子查询不依赖于父查询为不相关子查询,依赖于子查询为相关子查询
3.1 带有IN谓词的嵌套查询SELECT Sno //查询选修课成绩大于90分的学生的学号FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Grade>=90)//查询选修了信息系统这门课的学生的学号和姓名SELECT Sno,Sname //这是一个不相关的子查询,FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN (SELECT CnoFROM CourseWHERE Cname='信息系统'))对于不相关子查询也可换成连接查询SELECT Student.Sno,SnameFROM Student,SC,CourseWHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname='信息系统'‘
3.2 带有比较符的嵌套查询SELECT Sno,Cno //相关子查询,如果涉及一张表里的属性在父查询和子查询中都出现。必须要加入别名FROM SC x //查询每门课程中大于自己选修课平均分的课程WHERE Grade>=(SELECT AVG(Grade)FROM SC yWHERE X.Sno=Y.Sno)
3.3 带有ANY,ALL谓词的子查询ANY是任何一个,all是所有,在应用的时候,往往和比较运算符来结合使用>any,比最小的元素大(等价于>MIN),>all,比最大的元素(等价于>MAX),,比最大的元素小(等价于<MAX),<all,比最小的元素小(等价于<MIN)SELECT Sno,Sname //查询除了IS系之外的其他的系的年龄小于IS系中最大的年龄的人FROM StudentWHERE Ssage<ANY(SELECT SsageFROM StudentWHERE Sdept='IS' )AND Sdept<>'IS'下面是等价的式子SELECT Sno,SnameFROM StudentWHERE Ssage<(SELECT MAX(Ssage)FROM StudentWHERE Sdept='IS' )AND Sdept<>'IS'
3.4 带有ESTSIS谓词的查询EXISTS表示存在的意思,他只有true和false的意思,如果内层查询为空,则返回false给where,如果内层查询为非空,则返回trueNOT EXISTS 表示不存在的意思。和上面的正好相反。查询的结果依赖于EXISTS后面是TRUE还是false//查询选修了一号课程学生的姓名SELECT SnameFROM StudentWHERE EXISTS (SELECT *FROM SCWHERE Student.Sno=SC.Sno AND Cno='1')
4 集合查询UNION 并操作,EXCEPT 差操作, INTERSECT 交操作 参加集合的操作的列数必须相同,而且数据类型必须相同//查询IS系的同学或年龄小于19的同学SELECT * //UNION 会自动去掉重复的列 UNION ALL 不会去掉重复的列FROM StudentWHERE Sdept='IS'UNIONSELECT *FROM StudentWHERE Ssage<=19 //等价于select后面的语句是where Sdept='IS' or Ssage<=19
SQL 基本查询语句相关推荐
- mysql五补充部分:SQL逻辑查询语句执行顺序
mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括: 如 ...
- SQL 分页查询语句大全即(查找第N到M条记录的方法)
SQL 分页查询语句大全即(查找第N到M条记录的方法) 第一种方法,我的原创方法 row=2 表示分页行数 page=1 表示页码 getnum=row*page select * from (se ...
- sqlserver 指定的网络名不再可用_50个比较实用的SQL Server查询语句(1)
在本文中,我将解释一些通用的SQL查询.我认为每个开发人员都应该了解这些查询.这些查询与SQL的任何特定主题都无关.但是了解这些查询可以解决一些复杂的任务,并且可以在许多场景中使用. 查询1:检索所有 ...
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- mysql查询第二个字母为a_MSSQL_关于SQL Server查询语句的使用,一.查询第二个字母是t或者a的 - phpStudy...
关于SQL Server查询语句的使用 一.查询第二个字母是t或者a的雇员的全部信息 select * from employees where firstname like '_[t,a]%' 注意 ...
- mysql基础10(SQL逻辑查询语句执行顺序)
SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <rig ...
- mysql的查询语句大全_sql语句(sql数据库查询语句大全)
sql语句 结构化查询语言(StructuredQueryLanguage)缩写为SQL.结构化查询语言是一种数据库查询和编程语言,用于访问数据以及查询,更新和管理关系数据库系统: 程序功能 创建数据 ...
- MySQL补充部分-SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
最新文章
- 循环神经网络(RNN)简介
- oracle批量更新数据从另一表_常用SQL系列之(五):多表和禁止插入、批量与特殊更新等...
- Android 5.1 Lollipop的Zygote分析——上篇
- STM32 - 高级定时器的设定 - 基础-05 - 输出波形控制 -Complementary outputs and dead-time insertion 相位调整@互补输出和死区控制
- gulp临时服务器显示html页面,用Gulp实现CSS压缩和页面自动刷新
- tomcat中request对象是被创建的_Python中对象的创建与引用
- Python URL编码
- win10恢复经典开始菜单_window10开始菜单经典怎么设置
- Android应用程序键盘(Keyboard)消息处理机制分析(7)
- finereport 格式化金额函数_帆软报表常用函数总结
- 大学生创新创业企划书
- c花体复制_求类似ℒℴѵℯ 这样的花体英文字母符号,可以直接复制的
- DVWA网盘下载和安装教程 详解
- Linux沙箱技术简介
- tagged和untagged
- Power Query 系列 (01) - Power Query 介绍
- linux ssh复制粘贴,Linux下SSH Session复制功能实现方法
- C语言中的void 和void 指针类型
- python kivy显示图片_Kivy 图形界面开发初体验
- 郑州旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板