*
数据库初级SQL语言
*
1、SQL查询语言预览
(1)数据定义语言(DDL):SQL DDL定义关系模式、删除关系、修改关系模式
(2)数据操纵语言(DML):SQL DML数据库的增删改查
(3)完整性:SQL DDL保存在数据库中的数据必须满足所定义的完整性约束
(4)视图定义:SQL DDL包括定义视图的命令
(5)事务控制:SQL包括定义事务开始和结束的命令
(6)嵌入式SQL与动态SQL
(7)授权:SQL DDL包括定义视图和关系访问的权限
2 、SQL数据定义
2.1基本类型
char 定长 最多8000个字符(非unicode编码)
char(10) 如“小小” 前四个字符存放“小小” 后面用六个空格补全
varchar 变长 最多8000个字符(非unicode编码)
varchar(10) 如“小小” sql server会自动给它分配四个字符,这样可以节省空间
ntext(unicode编码)变长 最大长度为2的30次方-1个字符
text(非unicode编码)变长 最大长度为2的31次方-1个字符
nchar(unicode编码)定长 最多4000个字符
nvarchar(unicode编码)变长 最多4000个字符
Numeric(p,d) 如numeric(3,1) 可以精确的存储44.5
2.2基本模式定义
CREATE TABLE nihao
(
id int ,
name VARCHAR(10) not NULL,
sex VARCHAR(10) not NULL,
primary key (id),
FOREIGN key (name) REFERENCES student
);
3查询语句的基本结构
3.1(单表查询)
SELECT *
from nihao
WHERE nihao.id=1
3.2(多表查询)
SELECT *
from nihao,student
WHERE nihao.name=student.name 注:先from ,再where ,然后select
3.3(自然连接)
SELECT *
from nihao NATURAL JOIN student
where nihao.id=1
4附加的基本运算
4.1更名运算(AS)
SELECT A.id
from nihao as A, student as B
where A.id=B.id
4.2字符串运算(like)
百分号%:匹配任意子串
下划线_ :匹配任意一个字符
如:_ _ _ 表示只含三个字符的字符串
_ _ _%表示至少含有三个字符串
4.3 select子句的说明
Nihao.*表示Nihao的所有属性
Select *表示from的所有属性
4.4 显示次序(order by)
Select * from nihao where id>8 order by id desc
4.5where子句谓语
Select nihao.*
From niaho
Where id>8 and sex=男
5 集合运算(union,intersect,except)(并,交,差)
例如:
(Select nihao1.id from nihao1) union (Select nihao2.id from nihao2)
6.空值(null)的处理 略
7.聚集函数(avg min max sum count )
7.1 基本聚集(avg min max sum count )
Select count(*) from nihao where sex=男
7.2分组聚集 (group by)
Select nihao.id, count(*) from nihao where sex =男 group by name
7.3 having子句
Having 子句的谓词在形成分组后才起作用
Selecct dept_name ,avg(salary)as avg_salary
From instructor
Where year=2015
Group by dept_name
Having avg(salary)>4200
操作的次序:
(1)根据from计算出一个关系
(2)如果出现了where,那么where 谓词将作用到from子句的关系之上
(3)如果出现了group by,满足where谓词的元组通过group by 形成分组,如果没有出现group by ,那么将满足where的整个集合当成一个分组
(4)如果出现了having,他将作用到每个分组上,不满足的分组将被抛弃
(5)最后是select
7.4 对空值和布尔值的聚集
8嵌套子查询
8.1 集合成员资格 (in /not in)
例如:
Select course_id
From sectoin
Where semester =‘Fall’ and course in ( select course from section where semester=”Spring” )
例如:
Select name from instructor where name not in( “kg”,”ni”)
8.2 集合的比较
例如:(至少比某一个大)
Select name from instructor where salary > some ( select salary from instructor where dept_name =”English”)
(比所有的都大)
Select name from instructor where salary > all ( select salary from instructor where dept_name =”English”)
8.3 空关系的测试(exists)
Exists结构在作为参数的子查询非空时返回true
找出在2009年秋季和2010年春季同时开课的所有课程:
Select course_id from section as s where semester =”Fall ” and year=2009 and
Exists ( select * from section as T where
semester =”Spring ” and year=2010 and
S.course_id=T.course_id)
找出选修了生物Biology系所开设的所有课程的学生
Select S.ID,S.name from student as S where not exists (
Select course_id from course where dept_name=”Biology”
Except
Select T.course_id from task as T where S.ID=T.ID
)
8.4重复元组的存在性(unique)
找出所有在2009年最多开设一次的课程
Select T.course_id from course as T where unique (
Select R.course_id from section as R where T.course_id = R.course and R.year=2009
)
9数据库的修改
9.1 删除
9.2插入
9.3更新