470 likes | 741 Views
SQL 语法介绍. 1 SQL 简介. SQL 是什么 SQL 功能简介. 1.1 什么是 SQL. SQL(Structured Query Language, 结构查询语言)是一个功能强大的数据库操纵语言。 SQL 使用场合: 应用程序与数据库的通讯 通过 DBMS 或第三方工具,完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据. 1.2 SQL 命令分组. DML(Data Manipulation Language, 数据操作语言):用于检索或者修改数据
E N D
1 SQL简介 • SQL是什么 • SQL功能简介
1.1 什么是SQL SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库操纵语言。 SQL使用场合: • 应用程序与数据库的通讯 • 通过DBMS或第三方工具,完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据
1.2 SQL命令分组 • DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据 • DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象 • DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限
1.2.1 DML命令 • SELECT:用于检索数据 • INSERT:用于增加数据到数据库 • UPDATE:用于从数据库中修改现存的数据 • DELETE:用于从数据库中删除数据
1.2.2 DDL命令 • CREATE TABLE :创建表结构 • ALTER TABLE :修改表结构 • DROP TABLE :从数据库中删除表 • CREATE INDEX :创建索引 • DROP INDEX :删除索引
1.2.3 DCL命令 • ALTER PASSWORD :设置访问口令 • GRANT :分配权限 • REVOKE :收回权限 • CREATE SYNONYM :创建替代用户
1.2.4 SQL功能概述 • 建立数据库的表格 • 改变数据库系统环境设置 • 针对某个数据库或表格,授予用户存取权限 • 对数据库表格建立索引值 • 修改数据库表格结构。(新建、删除或是修改表格字段) • 对数据库进行数据的新建、删除、修改、查询
2 SQL命令 • 常用SQL命令 • SQL语法
2.1 Select命令 功能:从数据库中检索所需要信息。 例:从学生表(student)中检索出李明的档案信息,其SQL语法为: Select * from student where SNAME=‘李明’
2.1.1 Select 命令语法 SELECT [predicate] {*|table.*| [table.]field [,[table.]field2 [,...]]} [AS alias1 [,alias2[,...]]] FROM tableexpression [,...] [IN externaldatabase][WHERE...][GROUP BY...][HAVING...][ORDER BY...][WITH OWNERACCESS OPTION]
2.1.2 predicate ALL,DISTINCT, DISTINCTROW,TOP n DISTINCT: Select DISTINCT SNAME from student TOP n: Select top 2 * from student
2.1.3 查询字段 所有字段:Select * from Student 指定查询字段:Select SNO,SNAME from Student 字段换名: Select SNO as 学号,SNAME as 姓名from Student 查询多表字段: Select a.SNO,a.SNAME,b.CNAME,b.SCORE from Student a,Curse b where a.SNO=b.SNO Select a.*,b.CNAME,b.SCORE from Student a,Curse b where a.SNO=b.SNO
2.1.4 From子句 指定从哪些表中获取数据,可以同时给表取一个别名。 Select top 2 Student.SNO, Student.SNAME, Curse.CNAME, Curse.SCORE from Student,Curse where Student.SNO= Curse.SNO Select top 2 a.SNO, a.SNAME, b.CNAME, b.SCORE from Student a,Curse b where a.SNO= b.SNO
2.1.5 where子句 指定从表中获取哪些记录。 Select * from student where SSEX=‘女’ Select a.SNO, a.SNAME, b.CNAME, b.SCORE from Student a,Curse b where a.SNO= b.SNO and b.SCORE>=90 Select a.SNO, a.SNAME, b.CNAME, b.SCORE from Student a,Curse b where a.SNO= b.SNO and ((b.SCORE>=90 and a.SSEX=‘男’) or (b.SCORE>=80 and a.SSEX=‘女’))
2.1.6 order by子句 指定结果如何排序:升序:ASC;降序:DESC。 Select * from student order by SNAME Select a.SNO, a.SNAME, b.CNAME, b.SCORE from Student a,Curse b where a.SNO= b.SNO order by a.SNAME, b.SCORE DESC
2.1.7 group by子句 对查询结果进行分组合并。 例:查询学生的平均成绩并按平均成绩排序 Select a.SNO, a.SNAME, AVG(b.SCORE) as AVG_SCORE from Student a,Curse b where a.SNO= b.SNO Group by a.SNO,a.SNAME Order By AVG(b.SCORE)
2.1.8 having子句 与group by子句配套使用,与where类似,但主要是针对分组字段的条件。 例:查询平均成绩在85分以上的学生,并显示平均成绩 Select a.SNO, a.SNAME, AVG(b.SCORE) as AVG_SCORE from Student a,Curse b where a.SNO= b.SNO Group by a.SNO,a.SNAME having AVG(b.SCORE) >=85 错误写法: Select a.SNO, a.SNAME, AVG(b.SCORE) as AVG_SCORE from Student a,Curse b where a.SNO= b.SNO and AVG(b.SCORE) >=85 Group by a.SNO,a.SNAME
2.2 SQL的特殊操作 • IN 操作符 • LIKE 操作符 • SQL 的运算符及表达式 • SQL 的统计函数 • Between … and 运算符 • Union 操作 • INNER JOIN操作
2.2.1 in操作符 • 用在where后,当同时查询多个条件时,用以简化写法 Select * from student where SNAME in (‘李明’,‘成功’) 等价SQL语句: Select * from student where SNAME =‘李明’or SNAME =‘成功’ • 多层SQL查询
2.2.2 like操作符 实现模糊查询。 例:找出所有姓李的学生 Select * from student where SNAME like ‘李*’ 或: Select * from student where SNAME like ‘李%’
2.2.2 like操作符 1、用“*”或“%”匹配多个字符 (1)"a*a":可筛选:"aa","aBa","aBBBa",不能筛选:"aBC" (2)"*ab*":可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac" 例: 以“李”开头:Select * from student where SNAME like “李*“ 以“明”结尾:Select * from student where SNAME like “*明” “王”开头、“艳”结尾:Select * from student where SNAME like “王*艳” 包含有“李”:Select * from student where SNAME like “*李*” 2、单一字符 "a?a":可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa" 3、单一数字 "a#a":可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a"
2.2.3运算符及表达式 1、算术运算符 ( ) 分组括号 *、/ 乘、除 +、- 加、减 算术运算符的优先次序为括号、乘方、乘除和加减,同级运算从左到右依次进行 例: 还有多少年退休: Select SNO,SNAME,60-SOLD as TX_OLD from student 45年以后已退休的有哪些: Select * from student where SOLD+45>=60
2.2.3运算符及表达式 2、关系运算符 < 小于 > 大于 = 等于 <= 小于等于 >= 大于等于 <> 不等于 字符的比较是按ASCII码的大小进行的,汉字是按机内码比较大小的。 对于表达式则是先算表达式的值,然后用值比较大小。 例: Select * from student where SOLD+45>=60
2.2.3运算符及表达式 3、逻辑运算符 AND 逻辑与OR 逻辑或NOT 逻辑非 逻辑运算符的优先次序为:NOT→AND→OR 表达式的运算顺序是先关系表达式后逻辑表达式 例: Select * from student where (SOLD+45>=60 and SSEX=‘男’) or (SOLD+45>=55 and SSEX=‘女’)
2.2.4 数学函数 1、AVG(字段名或表达式):算数平均数 Select avg(sold) as avg_old from student 2、COUNT (字段名或表达式) :计算记录条数 Select COUNT(*) as NSRS from student where SSEX=‘女’ 3、SUM (字段名或表达式) :返回某特定字段或是运算的总和数值。 Select sum(score) as t_score from Curse where sno=‘870101’ 4、MAX (字段名或表达式)、 MIN (字段名或表达式):求最大、最小值 上述统计函数多与group by 联合使用。 例:统计出每门课的最高分 Select CNAME,MAX(SCORE) as MAX_SCORE,MIN(Score) as MIN_SCORE from Curse group by CNAME
2.2.5 BETWEEN...AND 决定某一数值是否介于特定的范围之内 例:查询年龄在18-20岁之间的学生 Select * from student where sold BETWEEN 25 AND 30 等价于: Select * from student where sold>=25 AND sold<=30
2.2.6 多层SQL 例:查询所有平均成绩在85分以上学生的名单 Select * from student where sno in (select sno from Curse group by sno having avg(score)>=85) 试比较: SELECT a.sno, a.sname, avg(b.score) as avg_score FROM student AS a, Curse AS b WHERE a.sno=b.sno GROUP BY a.sno, a.sname HAVING avg(b.score)>=85
2.2.7 union 将两个以上的表格或是查询的结果组合起来,但组合的两部分内容必须具有相同的结构。 例:将两个表中的男生数据提出来放在一起 Select * from student1 where ssex=‘男’union select * from student2 where ssex=‘男’
2.2.8 innerjoin 当某一个共同的字段数据相等时,将两个表格的记录加以组合。 例:从两个表中提取学生档案及成绩 SELECT student.sno, student.sname, Curse.cname, Curse.score FROM student INNER JOIN Curse ON student.sno=Curse.sno
2.3 数据更新语句 • Update:更新表中已有的数据 • Insert into:向表添加新的数据 • Delete From:删除表中的记录
2.3.1 update语句 更新指定条件的数据。 UPDATE table SET newvalue WHERE criteria 例:更新学生成绩 Update Curse set score=65 where sno= ‘870102’ and cname= ‘微机原理与应用’ Update Curse set score=75,cname=‘数据结构’where sno= ‘870102’ and cname= ‘微机原理与应用’ 所有学生的年龄加1 Update student set sold=sold+1
2.3.1 insert into语句 向表中增加新的数据。 INSERT INTO <表名> (<字段列表>) values (<值列表>) 例:增加新的成绩 Insert into Curse (sno,cname,score) values (‘870102’,’数据结构’,75)
2.3.2 insert into语句 向表中增加新的数据。 INSERT INTO <表名> (<字段列表>) values (<值列表>) 例:增加新的成绩 Insert into Curse (sno,cname,score) values (‘870102’,’数据结构’,75) 增加名单: Insert into student (sno,sname,sold,ssex,sclass) values ('870203','王五',19,'男','微机872')
2.3.3 delete from语句 删除指定数据。 delete from <表名> where <条件> 例:从名单中删除‘王五’ Delete from student where sname= '王五' 该语句将删除学生表中所有姓名为‘王五’的记录 注意: Delete from student 将删除学生表中所有记录
2.4 数据维护语句 • CREATE TABLE :创建新的表 • SELECT...INTO :将查询结果保存为表 • ALTER TABLE :更改表结构 • CREATE INDEX:建立索引 • DROP 删除表或索引
3 SQL语句书写要求 • 所有关键字可不管大小写,但必须为半角 • 关键字之间的空格个数不限,但必须大于1 • 字符型数据、日期型数据必须用半角的单引号(或双引号)引起来 • 在有些系统中字段名称和表名是区分大小写的,应注意。 • 关键字的顺序一般不允许交换 • 所支持的增强函数、关键字等需参考所使用的DBMS,不同的系统会有所不同。