13、数据库(SQL)
13.1、什么是SQL
SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库操纵语言。
SQL使用场合:
应用程序与数据库的通讯
通过DBMS或第三方工具,完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据
13.2、SQL命令分组
DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据
DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象
DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限
13.3、DML命令
SELECT:用于检索数据
INSERT:用于增加数据到数据库
UPDATE:用于从数据库中修改现存的数据
DELETE:用于从数据库中删除数据
13.4、DDL命令
CREATE TABLE :创建表结构
ALTER TABLE :修改表结构
DROP TABLE :从数据库中删除表
CREATE INDEX :创建索引
DROP INDEX :删除索引
13.5、DCL命令
ALTER PASSWORD :设置访问口令
GRANT :分配权限
REVOKE :收回权限
CREATE SYNONYM :创建替代用户
13.6、SQL命令
(1)建表:
格式
例子:
create table test(
test_id int not null AUTO_INCREMENT,
name varchar(100),
primary key (test_id)
);
(2)insert into语句
向表中增加新的数据。
INSERT INTO <表名> (<字段列表>) values (<值列表>)
例:增加新的成绩
Insert into Curse (sno,cname,score) values (‘870102’,’数据结构’,75)
(3)Select命令
功能:从数据库中检索所需要信息。
例:从学生表(student)中检索出李明的档案信息,其SQL语法为:
Select * from student where SNAME=‘李明’
(4)Select 命令语法
SELECT [predicate]{*|table.*| [table.]field [,[table.]field2 [,...]]}
[AS alias1 [,alias2[,...]]] FROM tableexpression [,...] [IN externaldatabase][WHERE...]
[GROUP BY...][HAVING...][ORDER BY...][WITH OWNERACCESS OPTION]
predicate什么意思?
DISTINCT,TOP n
DISTINCT:
Select DISTINCT SNAME from student
TOP n:
Select top 2 * from student
(5)From子句
指定从哪些表中获取数据,可以同时给表取一个别名。
Select top 2 Student.SNO, Student.SNAME, Curse.CNAME, Curse.SCORE from Student,Curse
where Student.SNO= Curse.SNO
(6)where子句
指定从表中获取哪些记录。
Select * from student where SSEX=‘女’
(7)order by子句
指定结果如何排序:升序:ASC;降序:DESC。
Select * from student order by SNAME
(8)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)
(9)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
(10)SQL的特殊操作
IN 操作符 :
用在where后,当同时查询多个条件时,用以简化写法
Select * from student where SNAME in (‘李明’,‘成功’)
等价SQL语句:
Select * from student where SNAME =‘李明’ or SNAME =‘成功’
LIKE 操作符 :
实现模糊查询。
例:找出所有姓李的学生
Select * from student where SNAME like ‘李*’
或:
Select * from student where SNAME like ‘李%’
SQL 的运算符及表达式 :
算术运算符( ) 分组括号 *、/ 乘、除 +、- 加、减算术运算符的优先次序为括号、乘方、乘除和加减,同级运算从左到右依次进行
逻辑运算符AND 逻辑与 OR 逻辑或 NOT 逻辑非逻辑运算符的优先次序为:NOT→AND→OR 表达式的运算顺序是先关系表达式后逻辑表达式
SQL 的统计函数:
AVG(字段名或表达式):算数平均数
Select avg(sold) as avg_old from student
COUNT (字段名或表达式) :计算记录条数
Select COUNT(*) as NSRS from student where SSEX=‘女’
SUM (字段名或表达式) :返回某特定字段或是运算的总和数值。
Select sum(score) as t_score from Curse where sno=‘870101’
MAX (字段名或表达式)、 MIN (字段名或表达式):求最大、最小值
Between … and 运算符
决定某一数值是否介于特定的范围之内
例:查询年龄在18-20岁之间的学生
Select * from student where sold BETWEEN 25 AND 30
等价于:
Select * from student where sold>=25 AND sold<=30
Union 操作
INNER JOIN操作
13.7、数据更新语句
Update:更新表中已有的数据。
更新指定条件的数据。
UPDATE table SET newvalue WHERE criteria
例:更新学生成绩
Update Curse set score=65 where sno= ‘870102’ and cname= ‘微机原理与应用’
delete from语句:
删除指定数据。
delete from <表名> where <条件>
例:从名单中删除‘王五’
Delete from student where sname= '王五'
13.8、SQL语句书写要求
所有关键字可不管大小写,但必须为半角
关键字之间的空格个数不限,但必须大于1
字符型数据、日期型数据必须用半角的单引号(或双引号)引起来
在有些系统中字段名称和表名是区分大小写的,应注意。
关键字的顺序一般不允许交换
所支持的增强函数、关键字等需参考所使用的DBMS,不同的系统会有所不同。