SQL概述
-
结构化查询语言(Structured Query Language,简称SQL)是关系数据库的标准语言
-
特点:
-
综合统一:SQL集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体
-
高度非过程化:用户只需提出“做什么”即可,而不必关心怎么做。
-
面向集合的操作方式:操作对象是集合,操作所产生的结果也是集合。
-
一种语法多种使用方式:SQL可以直接以命令的方式交互使用,也可以嵌入使用、
-
语言简单,易学易用
-
-
-
SQL对三级模式结构的支持
-
外模式:sql定义的视图
-
模式 (概念模式):表结构的定义
-
内模式:定义了数据的存储方式,如记录为顺序存储还是B树存储,索引如何存储 还是 HASH方式存储,数据是否压缩等
-
-
-
-
操作语言
-
数据定义(create drop alter)
-
定义基本表
create table Student (StudenrNum CHAR(8) PRIMARAY KEY, StudentName VARCHAR(20) NOT NULL, StudentSex CHAR(2) DEFAULT '男', StudentDept CHAR(5) FOREIGN KEY(StudentDept) REFERRENCES Dept(DeptNum) /*表级完整性约束条件,StudentDept为外键,Dept为被参照表*/ );
-
修改基本表
ALTER TABLE Student ADD COLUNMN StudentPhone CHAR(11); /*添加新列*/ ALTER COLUMN StudentDept CHAR(3); /*修改列*/ DROP COLUMN StudentPhone; /*删除列*/ DROP CONSTRAINT StudentName; /*删除完整性约束*/
-
删除基本表
DROP TABLE Sudent /*表一旦删除,表中的定义和数据都被删除,在该表上建立的索引、触发器等对象一般也会被删除、有的还会删除在此表上建立的视图*/
-
建立索引
/*为学生表建立索引,名为Index_Student,按学生姓名升序排列,则按所在系降序排列*/ CREATE UNIQUE INDEX Index_Student ON Student(SudentName,StudentDept DESC); /*ASC升序 DESCJ降序 默认升序*/
-
删除索引
DROP INDEX Index_Student;
-
-
数据查询(select)
-
基本格式
select [all | distinct ] <目标表达式> from <表名或试图名> where <条件表达式> group by <列名> [having <条件表达式>] order by <列名>[asc | desc]; /* distinct:每组重复元素值显示一条(消除重复出现的值);在未指定的情况下,默认为all group by 按列名进行分组,该列值相等的元组为一个组 order by 用于按列名的值进行排序,默认ASC(升序),降序使用DESC */
-
单表查询
SELECT StudnetName from Student;/*查询指定列*/ SELECT * from Student /*查询全部列*/ select count(StudentNum) as '总人数' from Student; /*查询经过计算的值,类似的还有:max、min、avg、sum*/
-
查询满足条件的元组,通过where实现,查询条件如下:
查询条件 谓语 比较 =、> 、<、>=、<=、!=、!<、!>、NOT含上述比较运算符的条件表达式 确定范围 between and、not between and 确定集合 in、not in 字符匹配 like 、not like 空值 is null, is not null 多重条件 and 、 or 、not 注意:like 用来字符匹配,一般格式如下:
[not] like '<匹配串>'
其中,匹配串可以是一个完整的字符,也可以含有通配符 '%' 或'_'。
'%' 代表任意长度(可以是0)的字符串;'_' 任意任意单个字符,当字符用ASCII时,一个汉字用两个 -代替,当字符集为GBK时,一个汉字用一个 - 代替
例如:查询姓贾的学生:select * from Student where StudentName like '贾%;
-
order by子句
/*按照成绩降序排列成绩表Grade中的学生信息*/ select * from Grade order by StudentGrade DESC;
-
group by子句
/*统计每个学生所选课程数*/ select StudentNum,count(StudenNum)as ’所选课程数‘ from Grade group by StudentNum;
-
链接查询(多表查询)
1. 等值连接 /*查询学生成绩的情况*/ SELECT S.* ,SC.* FROM Student S,SC WHERE S.StudentNum = SC.StudentNum; 2. 外连接 左外连接:LETF OUTER JOIN 右外连接:RIGHT OUTER JOIN 自身链接
-
嵌套查询
1.包含in的子查询 select * from student where Studentdept in (select deptNum from Dept where deptName='软件工程'); 2.包含比较运算符的运算 select StudenNumber,SudentName from Student where StudentDept = (select deptNumber form Dept where DeptName='软件工程');
-
使用exists的子查询:不返回任何实际数据,只产生 逻辑真值“ture",或则逻辑假值”false”
-
-
数据更新(update、delete、insert)
-
插入数据
insert into Student values('2091496','Nobita'、‘女’);
-
插入子查询结果:将子查询的结果嵌入insert语句中,进行批量插入
-
修改数据
update student set StudenName='Doreamon" where StudentNum='2191496';
-
删除数据
DELETE FROM Student where StudentSex='女';
-
-