sql 倒数第二个_小白初探SQL(一)
SQL(结构化查询语言)是目前使用最广泛的数据库语言,可以同各种数据库建立联系、进行沟通,应用十分的广泛。
◆
结构化查询语言(Structured Query Language)简称SQL,是结构
化查询语言,是关系数据库的标准语言。是一个通用的、功能极强的关系数据库语言
SQL用于存取数据以及查询、更新和管理关系数据库系统。是一种特殊目的的编程语言,是一种查询和程序设计语言。
结构化查询语言是高级的非过程数据库化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
SQL的产生于发展
在1970年代初,由IBM公司San Jose,California研究实验室的埃德加·科德发表将数据组成表格的应用原则(Codd's Relational Algebra)。
1974年, D.D.Chamberlin和R.F. Boyce对Codd's Relational Algebra在研制关系数据库管理系统System R中,研制出一套规范语言-SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。
1980年改名为SQL。
1979年ORACLE公司首先提供商用的SQL。
1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。
1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。
(想要了解更多有关SQL语言发展与渊源请点击SQL的发展史)
SQl的功能:
(SQL具有数据查询、数据定义、数据操纵和数据控制四
种功能)
1
数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。
2
数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
3
数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。
SQL语言相关功能的动词
1)数据查询:SELECT
2)数据定义:CREATE、DROP、ALTER
3)数据操纵:INSERT、UPDATE、DELETE
4)数据控制:GRANT、REVOKE
语言特点
1.SQL风格统一
2.高度非过程化
3.面向集合的操作方式
4.以同一种语法结构提供两种使用方式
5.语言简洁,易学易用
基本概念
1.概念图:
2.基本表:
1)本身独立存在的表。
2)SQL中一个关系就对应一个基本表。
3)一个(或多个)基本表对应一个存储文件。
4)一个表可以带若干索引。
3.存储文件
1)逻辑结构组成了关系数据结构的内模式。
2)物理结构是任意的,对用户透明的。
4.视图
1)从一个或几个基本表导出的表。
2)数据库中只存放视图的定义而不存放视图对应的数据,
3)视图是一个虚表。
4)用户可以在视图上再定义视图。
下面以“习题”的方式为大家讲解SQL的数据查询功能——单表查询
“学生-课程”数据库
1.Student表
2.Course表
3.SC表
数据查询
1.语句格式
SELECT[ALL|DISTINCT]<< span="">目标列表达式>[ , << span="">目标列表达式>]…
FROM<< span="">表名或视图名>[>]…
[WHERE>]
[GROUP BY<< span="">列名1>[HAVING<< span="">条件表达式>]]
[ORDER BY << span="">列名2>[ASC|DESC]];
2.知识框架
单表查询知识框架
单表查询——选择表中的若干列
1.查询指定列
1)例一:查询全体学生的学号与姓名
SELECT Sno, Sname
FROM Studennt;
2)例二:查询全体学生的姓名、学号、所在系。
SELECT Sname, Sno, Sdept
FROM Student;
2.查询全部列
选出所有属性列:
i.在SELECT关键字后面列出所有列名
ii.将
例三:查询全体学生的详细记录。
SELECT Sno, Sname, Ssex, Sage, Sdept
FROM Student;
或
SELECT *
FROM Student
3.查询经过计算的值
1)
1)SELECT子句的可以为:
i.算数表达式
ii.字符串常量
iii.函数
iv.列别名
2)例四:查询全体学生的姓名及出生年份
SELECT Sname, 2016-Sage /*假定当年的年份为2016年*/
输出结果:
3)例五:查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名
SELECT Sname, ‘Year of Birth:’,2016-Sage,
LOWER(Sdept)
FROM Student;
输出结果:
单表查询——选择表中的若干元组
1.消除取值重复的行
1)如果没有指定DISTINCT关键词,则缺省为ALL
例六:查询选修了课程的学生学号。
SELECT Sno
FROM SC
等价于:
SELECT ALL Sno
FROM SC;
执行结果为:
2)指定DISTINCT关键词,去掉表中重复的行
SELECT DISTINCT Sno
FROM SC;
执行结果:
2.查询满足条件的元组
1)常用的查询条件
2)比较大小
(谓词:>,=,<=,!=,<>,!>,!上述运算符)
i.例7:查询计算机科学系全体学生的名单
SELECT Sname
FROM Student
WHERE Sage = ‘CS’:
ii.例8:查询所有年龄在20岁以下的学生姓名及其年龄
SELECT Sname, Sage
FROM Student
WHERE Sage<20;< span="">
iii.例9:查询考试成绩有不及格的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;< span="">
3)确定范围
(谓词:BETWEEN…AND…;NOT BETWEEN…AND…)
i.例10:查询年龄在20~23(包括20岁和23岁)之间的学生的姓名、系别和年龄。
SELECT Sname , Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
ii.例11:查询年龄不在20~23岁之间的学生姓名、系别和年龄。
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
4)确定集合
(谓词:IN<< span="">值表>、NOT IN >)
i.例12:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN (‘IS’.’MA’,’CS’);
ii.例13:查询既不是信息系(IS)、数学系(MA),也不是计算机科学系的学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN(‘IS’,’MA’,’CS’);
5)字符匹配
(谓词:[NOT] LIKE ‘<< span="">匹配串>’ [ESCAPE ‘<< span="">换码字符>’])
i.匹配串为固定字符串
【例14】:查询学号为200215121的学生的详细情况。
SELECT *
FROM Student
WHERE Sno LIKE ‘200215121’;
等价于:
SELECT *
FROM Student
WHERE Sno =’200215121’
ii.匹配串为含通配符的字符串
【例15】:查询所有姓刘学生的姓名,学号和性别。
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE ‘刘%’
【例16】:查询姓“欧阳”且全名为三个汉字的学生的姓名。
SELECT Sname
FROME Student
WHERE Sname LIKE ‘欧阳_’;
【例17】:查询名字中第二个字为“阳”字的学生的姓名和学号。
SELECT Sname, Sno
FROME Student
WHERE Sname LIKE’__阳%’;
【例18】:查询所有不姓刘的学生姓名
SELECT Sname,
FROM Student
WHERE Sname NOT LIKE ‘刘%’;
6)模式匹配
在LIKE操作符的模式中
1.用%(有时候用*)匹配任意子串
2.用__(有时候用?)匹配任意一个字符
3.在模式中为了使用特殊字符%和__等,允许用\将他们转义成普通字符。
4.如:LIKE’__ __\%’ ESCAPE‘\’(ESCAPE‘\’表示“\”为转换字码)
5.在ACCESS中查找通配符用 [] 。
ii.使用转码字符将通配符转义为普通字符
【例19】查询DB_Design课程的课程号和学分。
SELECT Cno, Ccredit
FROM Course
WHERE Cname LIKE ‘DB\_Design’ESCAPE’\’
【例20】查询以‘DB_’开头,且倒数第三个字符为i的课程的详细情况。
SELECT *
FROME Course
WHERE Cname LIKE ‘DB\_%i_ _’ESCAPE’\’
7)涉及空值的查询
(谓词:IS NULL或IS NOT NULL “IS”不能用“=”代替)
i.【例21】某些学生选修课程后没有参加考试,所以有选课记录,但是没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
SELECT Sno, Con
FROM SC
WHERE Grade IS NULL.
ii.【例22】查询所有有成绩的学生学号和课程号
SELECT Sno, Cno
FROM SC
WHERE Grade IS NOT NULL
8)多重条件查询
i.逻辑运算符:AND 和OR 来联结多个查询条件
1.AND的优先级高于OR
2.可以用括号改变优先级
ii.可用来实现多种其他谓语
1.[NOT] IN
2.NOT] BETWEEN…AND…
iii.【例23】查询计算机系年龄在20岁下的学生和姓名。
SELECT Sname
FROM Student
WHERE Sdept=‘CS’AND Sage<20;< span="">
iv.改写【例12】
【例12】:查询信息系(IS),数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN(‘IS’,’MA’,’CS’)
可改写为:
SELECT Sname,Ssex
FROME Student
WHERE Sdept=’IS’OR Sdept=’MA’OR Sdept =’CS’
9)ANY,ALL的使用
i.
ii.【例24】:查询比计算机系所有学生年龄都小的学生姓名和年龄。
SELECT SNAME,AGE
FROM Student
WHERE AGE
( SELECT AGE
FROM Student
WHERE DEPT=’计算机’);
3.ORDER BY子句
1)ORDER BY子句
可以按一个或多个属性列排序
1.升序:ASC:
2.降序:DESC;缺省值为升序
2)当排序列含空值时
1.ASC:排序列为空值的元组最后显示
2.DESC:排序列为空值的元组最先显示。
3)【例25】:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列
SELECT Sno, Grade
FROM SC
WHERE Cno=’3’
ORDER BY Grade DESC
4)【例26】:查询全体学生请情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
SELECT *
FROM Student
ORDER BY Sdept, Sage DESC
4.聚集函数
1.计数:
COUNT ([DISTINCT|ALL]*)
COUNT ([DISTINCT|ALL]<< span="">列名>)
2.计算总和
SUM ([DISTINCT|ALL]<< span="">列名>)
3.计算平均值
AVG ([DISTINCT|ALL]<< span="">列名>)
4.计算最大最小值
MAX ([DISTINCT|ALL]>)
MIN([DISTINCT|ALL]<< span="">列名>)
1)【例27】:查询学生总人数
SELECT COUNT(*)
FROM Student;
【例28】:查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM SC;
【例29】:计算1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno=’1’;
【例30】查询选修了1号课程的学生最高分数。
SELECT MAX(Grade)
FROM SC
WHERE Cno=’1’;
【例31】查询学号为200215012的学生选修课的总学分数。
SELECT SUM(Ccredit)
FROM SC, Course
WHERE Sno=’200215012’AND SC.Cno=Course.Cno;
5.GROUP BY 子句
GROUP BY子句分组:细化聚集函数的作用对象
1.未对查询结果分组,聚集函数将作用于整个查询结果
2.对查询结果分组后,聚集函数将分别作用于每个组
3.作用对象是查询的中间结果表
4.按指定的一列或多列分组,值相等的为一组。
1)【例32】:求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Con;
【例33】:查询选修了3门以上课程的学生学号。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3
HAVING短语和WHERE子句的区别(作用对象不同)1.WHERE子句作用于基表或视图,从中选择满足条件的元组。2.HAVING短语作用于组,从中选择满足条件的组。
这一期的文章就介绍到这里,感谢阅读!,欢迎各界大佬后台留言或私信我投稿、说出自己的想法、提出建议与批评!希望能通过这个平台能与大家多多交流,结识更多志同道合的朋友!
sql 倒数第二个_小白初探SQL(一)相关推荐
- sql的加减乘除运算_小白学sql(一)
最近在b站学习sql,在这里做笔记.感兴趣的同学可以一起学习呀~ 1. 基本介绍 sql_store是一个数据库,而customers是数据库中的一个表格. 1.1 如何选择一个数据库 最简单的操作就 ...
- sql 一次性批量插入_考虑使用SQL批量插入的安全性
sql 一次性批量插入 In this article, we'll discuss security implications of using SQL Bulk Insert and how to ...
- sql 视图不排序_算法工程师SQL进阶:神奇的自连接与子查询
自连接与子查询是SQL中非常重要的两项技术,自连接是针对相同的表的联结方法,是SQL语言面向集合编程思想的集中体现,而子查询有很多变式,关联子查询技术是在实际中进行行与行之间的比较时非常重要的方法,特 ...
- js 点击最后一个 和倒数第二个_精选一组趣知识;最后一个节目是压轴还是压台...
一,李白的<侠客行>中的诗句是「了事拂衣去,深藏功与名」还是「事了拂衣去,深藏身与名」? 二,「山重水复疑无路」与「山穷水尽疑无路」谁才是现在正确的版本? 三,"压轴" ...
- python sql server 数据同步_两台SQL Server数据同步解决方案
--定时同步服务器上的数据 --例子: --测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test --服务器上的表(查询分析器连接到服务器上创建) ...
- js 点击最后一个 和倒数第二个_期货及期权品种的最后交易日,您都了解吗?...
针对临近交割月份的合约,流动性会变差,交易所也会相应的提高保证金率,所以为了控制账户风险,在临近交割月份合约的最后交易日之前,及时自行完成移仓是很有必要的.那么持有临近交割月份合约的自然人客户应该在多 ...
- sql server键查找_如何查找SQL Server版本
sql server键查找 In this article, we will explore how to find the SQL Server version details with vario ...
- sql 表变量 临时表_何时使用SQL临时表与表变量
sql 表变量 临时表 It is very beneficial to store data in SQL Server temp tables rather than manipulate or ...
- sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
sql查询禁用缓存 Every data warehouse developer is likely to appreciate the significance of having surrogat ...
最新文章
- java一定时间间隔的定时任务_Java 定时任务---Timer
- spring:《spring实战》读后感一
- C++程序设计之可调用对象与标准库function
- xampp for Ubuntu安装.run文件
- 解决 Windows To Go U盘没有盘符的问题
- 微信小程序 欢迎界面开发的实例详解
- 产生的DLL (VS2005, MATLAB7.5, mwArray)
- 带用户名和密码的GitHub链接
- WebAPI Get
- 次坐标从0开始_全站仪使用方法及坐标计算,详细讲解!建议收藏!
- 关于 extern inline
- Mysql Workbench导入Access数据库
- 小程序接入h5页面_微信小程序跳转到H5页面实战篇
- 《东周列国志》第九十回 苏秦合纵相六国 张仪被激往秦邦
- 开关电源—Buck电路原理及其仿真
- HeartBeat简单介绍和基本作用:
- centOS brctl 创建透明网桥
- 仙道服务器维护,【正式服】2月14日例行更新维护公告
- 局域网访问提示无法访问检查拼写_windows无法访问请检查名称的拼写… 错误代码:0x80070035 | 吴文辉博客...
- catkin_make报错: ROS Base path和Source space不一致问题,
热门文章
- html链接是什么意思,html中url什么意思?怎么用?
- Qt::WA_NoMousePropagation用法
- java如何转成jar包,修改及反编译可运行Jar包实现过程详解
- 2 数据源配置_SpringBoot 整合Druid与配置数据源监控
- delimited mysql_在MySQL中存儲逗號分隔的數據
- azure kinect三维点云_万众期待的 【三维点云处理】 课程来啦!
- python init函数可以外部调用么,如何从python类中调用外部函数
- 别给小偷可乘之机!日本山形县警方呼吁民众“锁门”
- IT工作一年的总结——来自一个小菜鸟
- Nhibernate+SQLite 入门实例指南二 类的继承、多态关系