1、关系数据库标准语言SQL / 1,SQL语言初步数据查询语句数据库更新语句数据定义语句数据控制语句,什麽是SQL?,SQL:Structured query language 功能:查询、操纵、定义、控制 特点:1、一体化;2、两种使用方式,统一的语法结构;方式一、联机交互使用方式;方式二、嵌入式。3、高度非过程化;4、语言简洁,易学易用。,SQL支持关系数据库三级模式,基本表:独立存在的表。每个基表对应一个存储文件,一个表可带若干索引。存储文件+索引=内模式 视图:是一个虚表。数据库中仅存视图定义,不存对应的数据 。,SQL的三级模式,外模式,模式,内模式,Storefile1,Storef
2、ile2,Storefile3,Storefile4,Basetable1,Basetable2,Basetable3,Basetable4,View1,View2,SQL,用户,SQL命令的种类,DDL,数据定义语言 DML,数据操纵语言 DQL,数据查询语言 DCL,数据控制语言 数据管理命令 事务性控制命令,DDL,数据定义语言,用户创建或重新构建数据库的语言,CREATE INDEX ALTER INDEX DROP INDEX,CREATE TABLEALTER TABLEDROP TABLE,DML,数据操纵语言,用于在关系数据库对象中操纵数据INSERTUPDATEDELETE
3、DQL,数据查询语言 对数据库中的信息寻找和定位SELECT,DCL,数据控制语言,用于创建与用户访问相关的对象,也控制着用户的权限分配ALTER PASSWORD改变口令GRANT为用户授予特权REVOKE从用户处收回特权,数据管理命令,审计和分析对数据库的操作,并可分析系统的执行过程START AUDITSTOP AUDIT,事务性控制命令,用户管理数据库的事务命令 COMMIT用于保护数据库的事务 ROLLBACK用于撤消数据库的事务 SAVEPOINT创建一组事务中的撤消点 SET TRANSACTION给事务命名,数据库中的表结构,数据库中的表数据和基本数据类型,数据库中的表,表:字
4、段、记录、列、主键,customer_tbl,Order_tbl,Products_tbl,Prod_id Prod_desc cost 112 candy 1.35 113 plastic 1.04,Products_tbl,记录,列(字段),主键,数据和基本数据类型,数据是存储在数据库中的信息集合。数据类型用于给特定的数据提供规则。 基本数据类型包括:字符串数字日期和时间值,字符串,定长字符串:CHARACTER(n) 变长字符串:CHARACTER VARYING(n),数字值,BIT(n) BIT VERYING(n) DECIMAL(n,n) INTEGER SMALLINT FLO
5、AT(p) REAL(s) DOUBLE PRECISION(p),日期和时间值,DATE(YEAR,MONTH,DAY) TIME(HOUR,MINUTE,SECOND) INTERVAL TIMESTAMP,NULL值:为空。,数据查询语句,语法: SELECT * | all | column1,column2 FROM table1 ,table2 WHERE condition GROUP BY column1 ORDER BY column2(asc,desc) ,按列取值相等的原则进行分组,按列值进行排序,例1:SELECT * FROM products_tbl WHERE c
6、ost 5 例2:SELECT prod_desc,cost FROM products_tbl WHERE prod_id = 119 例3:多表查询SELECT employee_tbl.emp_name, employee_pay_tbl.positionFROM employee_tbl, employee_pay_tblWHERE employee_tbl.emp_id = employee_pay_tbl.emp_id,SQL中操作符的使用,定义:操作符是保留的字或字符,主要用于比较和算术运算。 分类:比较操作符,逻辑操作符和算术运算符。 1、比较操作符包括:=,, , =。 注意
7、比较双方的数据类型。 2、算术运算符包括:+,-,*,/等。与数学运算规则一致。,2、逻辑操作符,IS NULL(是否为空) BETWEEN(在某两个值之间) IN(一系列值中) LIKE(相似值的比较) EXITS(是否存在符合条件的数据) UNIQUE(是否唯一) ALL/ANY(一组数据的所有/其中的任何一个) AND/OR(逻辑与/或),IS NULL / IS NOT NULL,WHERE salary IS NULL 工资为空值。 WHERE salary = NULL 工资中含有NULL字符。 例: SELECT emp_id, emp_nameFROM employee_tbl
8、WHERE emp_phone IS NULL,BETWEEN,WHERE salary BETWEEN 200 and 300工资在200到300之间,包括200和300。IN WHERE salary IN (200,300,400)工资必须是200,300,400之中的值。,LIKE,使用匹配符将一个值同其相似的值比较。 匹配符包括:- 代表一个字符。% 代表多个字符。 如:WHERE salary LIKE -00查找00作为后两位数的值。WHERE salary LIKE 200%查找200作为前三位数的值。,EXISTS,查询在指定表中是否存在一行符合某种条件的数据。 WHERE
9、EXISTS (SELECT employee_idFROM employee_tblWHERE employee_id = 3333),UNIQUE,在特定的表中搜索每一行是否唯一。 WHERE UNIQUE(SELECT salaryFROM employee_tblWHERE employee_id = 3333) 测试满足条件的工资是否有重复数据。,ALL/ANY,与某个数据集中所有数据 / 任何一个进行比较。 WHERE salary all(SELECT salaryFROM employee_tblWHERE city = INDIAN),AND/OR,AND连接的条件必须都满足
10、。 OR连接的条件至少满足一个。 如:SELECT *FROM products_tblWHERE cost 10 and cost 30 如:SELECT *FROM products_tblWHERE prod_id = 7725or prod_id = 2345,库函数,函数通常是列名或表达式相连系的命令。1、统计函数2、字符函数3、算术函数,1、统计函数,统计函数:用于提供统计信息,如:累加、总和、平均值。 主要的统计函数: COUNT:统计行数或不为NULL的列数。 SUM:求和。 MAX:求最大值。 MIN:求最小值。 AVG:求平均值。,COUNT,语法: COUNT(*)|(D
11、ISTINCT|ALL|COLUMN NAME)注意:DISTINCT统计唯一的行;DISTINCT不能用于COUNT(*),只能用于COUNT(column_name),举例:,SELECT COUNT(*) FROM EMPLOYEE_TBL 统计雇员表中所有行数 SELECT COUNT(EMP_ID) FROM EMPLOYEE_TBL 统计所有雇员身份证号 SELECT COUNT(DISTINCT SALARY) FROM EMPLOYEE_PAY_TBL 统计唯一行数,SUM:仅用于数字类型。,语法:SUM( DISTINCT COLUMN NAME) 举例: SELECT SU
12、M (SALARY) FROM EMPLOYEE_PAY_TBL 计算工资总和 SELECT SUM (DISTINCT SALARY) FROM EMPLOYEE_PAY_TBL 计算没有重复工资总和,AVG:确定一组数据的平均值,语法:AVG(DISTINCT COLUMN NAME) 举例: SELECT AVG(SALARY) FROM EMPLOYEE_PAY_TBL 计算工资的平均值 SELECT AVG(DISTINCT SALARY) FROM EMPLOYEE_PAY_TBL 计算唯一的工资平均值,MAX和MIN,语法:MAX( DISTINCT COLUMN NAME )M
13、IN ( DISTINCT COLUMN NAME ) 举例: SELECT MAX(SALARY) FROM EMPLOYEE_PAY_TBL 计算最高的工资 SELECT MAX(DISTINCT SALARY) FROM EMPLOYEE_PAY_TBL 计算最高的工资,例:表DTUDENT_TBL,数学平均值 总成绩最高值 语文成绩最低值 数学成绩总和 表中的数据行数,1. SELECT AVG(maths)FROM STUDENT_TBL 2. SELECT MAX(total)FROM STUDENT_TBL 3. SELECT MIN(comp)FROM STUDENT_TBL
14、4. SELECT SUM(maths)FROM STUDENT_TBL 5. SELECT COUNT(*)FROM STUDENT_TBL,2、字符函数,UPPER(character string):将指定字符串中的小写字母换成大写字母。LOWER (character string): 将指定字符串中的大写字母换成小写字母。SUBSTRING (colunm name,startposition,length) 从指定字符串中取字符。,例:,SELECT UPPER(CITY) FROM EMPLOYEE_TBL SELECT LOWER (CITY) FROM EMPLOYEE_TB
15、L SELECT SUBSTRING(EMP_ID,1,3) FROM EMPLOYEE_TBL SELECT SUBSTRING(EMP_ID,5,3) FROM EMPLOYEE_TBL,3、算术函数,ABS(绝对值)、SIN、COS、TAN、EXP(指数)、SQRT(开方)、POWER(幂)语法:函数名(表达式)例:SELECT SQRT(MATHS) * 10FROM STUDENT_TBL,数据库更新语句,INSERT 给表填充数据 UPDATE 更新已存在的数据 DELETE 删除表中的数据,INSERT 给表填充数据,UPDATE 更新已存在的数据,语法: UPDATE tabl
16、e_nameSET column_name = valueWHERE condition例:UPDATE products_tblSET prod_id = 1001WHERE prod_desc = coat,DELETE 删除表中的数据,语法: DELETE FROM table_nameWHERE condition例:DELETE FROM products_tblWHERE prod_ID = 1001,SQL数据定义语句,数据定义功能包括:基表、视图和索引的定义。 一、创建与删除基表 二、创建与删除视图 三、索引的建立与删除,一、创建与删除基表,创建基表语法: CREATE TAB
17、LE table_name(col_name col_properties constraint)table_name 表名 col_name 列名创建临时表: CREATE TABLE # table_name(col_name col_properties constraint),删除一张表就是删除一张表定义及其所有与之相关连的数据、索引、触发器、约束和许可。 语法: DROP TABLE databasename.table_name 例: DROP TABLE pubs.dbo.authors2,修改表结构语法: ALTER TABLE table_namemodifycol_name
18、 col_propertiesaddcol_name col_propertiesdropcol_name col_properties 例:ALTER TABLE employee_tblmodify(emp_id varchar(10),例:创建一雇员表(编号/C,姓名/C,住所/C,电话/N)。,CREATE TABLE employee_tbl(emp_id char(9) not null,emp_name varchar(40) not null,emp_city varchar(15) not null,emp_phone number(10) null),二、视 图,视图的定义
19、 视图的查询 视图的更新 删除视图,视图的定义,什么是视图?视图是存储在数据库中的预先定义好的查询,具有表的外观,可以象表一样对其进行存取,但不占据物理存储空间。 视图的特点:视图的存在依赖于生成视图的表;视图能用作数据库安全的一种形式;利用视图维护综合数据。,创建视图,基本语法:CREATE VIEW view_name ASSELECT STATEMENTWITH CHECK OPTION1、从单独的表中创建视图2、从多表中创建视图3、从视图中创建视图,1、从单独的表中创建视图,语法: CREATE VIEW view_name ASSELECT * |COL1,COL2,FROM tab
20、le_nameWHERE expression例: CREATE VIEW emp _ view ASSELECT emp_id,emp_name,phoneFROM employee_tbl,2、从多表中创建视图,语法: CREATE VIEW VIEW_NAME ASSELECT * |COL1,COL2,.FROM TABLE_NAME1,TABLE_NAME2,WHERE EXPRESSION,例:,CREATE VIEW employee_summary ASSELECT e.emp_id,e.name,p.position,p.pay_rateFROM employee_tbl e
21、,employee_pay_tbl pWHERE e.emp_id = p.emp_id,3、从视图中创建视图,语法:CREATE VIEW2 ASSELECT * FROM VIEW1注意:不要创建层次太深的视图;例:由上例视图employee_summaryCREAT subsummary AS SELECT * FROM employee_summary,视图的查询,对视图的查询与对基本表查询一样; 系统执行视图查询时是把它转换成等价的对基本表的查询。 例:SELECT emp_id, positionFROM employee_summary WHERE pay_rate 15,视图的
22、更新,对视图的更新最终要转换成对基本表的更新。 视图更新条件:1、视图必须未涉及连接;2、视图必须不包含GROUP BY子句;3、视图不能包含任何组合函数;4、不能使用DISTINCT子句;5、WHERE子句不能包含表的嵌套引用。,例:UPDATE employee summarySET pay_rate = 18WHERE emp_id = 52431875 转换成:UPDATE employee _pay_tblSET pay_rate = 18WHERE emp_id = 52431875,删除视图,语法:DROP VIEW view_name 例:DROP VIEW employee
23、summary 删除了视图,由此视图导出的其他视图也将自动被删除 若导出此视图的基本表被删除了,则此视图也将自动删除,视图的优点,视图对于数据库的重构造提供了一定程度的逻辑独立性。 简化了用户观点。 视图使不同的用户能以不同的方式看待同一数据。 视图对机密数据提供了自动的安全保护功能。,三、索引的建立与删除,语法: CREATE UNIQUE CLUSTER INDEX index_name ON table_name(clo_name 升/降序,.)ASC:升序,DESC:降序UNIQUE 每一个索引只对应唯一的数据记录;CLUSTER 聚簇索引,是指索引项的顺序与表中记录的物理顺序一致的索
24、引组织。,例:为学生-课程数据库中的student, couse, sc 3个表建立索引。其中student表按学号升序建立唯一索引; couse表按课程号升序建立唯一索引; sc 表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX stusno ON student(sno) CREATE UNIQUE INDEX coucno ON couse(cno) CREATE UNIQUE INDEX scno ON sc(sno ASC,cno DESC),删除索引,语法:DROP INDEX ,例:删除student表的stusname索引DROP INDEX stus
25、name,四、数据控制语句,授权 收回权限,数据控制包括:数据的安全性控制完整性控制并发控制和恢复,授权:将对指定操作对象的指定操作权限授予指定的用户。,GRANT ,ON TO , WITH GRANT OPTION;,权限: SELECT,INSERT,UPDATE,DELETE;ALTER,INDEX;CREATE 对象类型:TABLE,DATABASE 对象:属性列,视图,基本表,数据库,例1:把查询student表权限授给用户U1. GRANT SELECT ON TABLE student TO U1;,例2:把查询sc表权限授给所有用户. GRANT SELECT ON TABLE SC TO PUBLIC;,例3:把对表SC的INSERT权限授给用户U2,并允许他转授. GRANT INSERT ON TABLE SC TO U2 WITH GRANT OPTION; GRANT INSERT ON TABLE SC TO U3,REVOKE ,ON FROM , ;,例4:把所有用户查询SC表权限收回. REVOKE SELECT ON TABLE SC FROM PUBLIC;,收回权限,例5:把用户U1修改student表的sno字段的权限收回. REVOKE UPDATE(sno) ON TABLE student FROM U1;,