SQL基础笔记
一、概述
SQL全称是Structured Query Language(结构化查询语言),它是一种关系型数据库中定义和操纵数据的标准语言。
二、SQL语言的分类
SQL是关系型数据库的基本操作语言,是数据库管理系统与数据库进行交互的接口。他将数据查询、数据操纵、事务控制、数据定义和数据控制功能集于一身,而这些功能又分别对应各自的SQL语言,具体如下:
数据定义语言(DDL):包括CREATE(创建)命令、ALTER(修改)命令、DROP(删除)命令等。
数据操纵命令(DML):包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)命令、SELECT ... FOR UPDATE (查询) 等。
数据库查询语言(DQL):包括基本查询语句、Order By子句、Group By子句等。
事务控制语言(TCL):包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROOLBACK(回滚)命令。
数据控制语言(DCL):GRANT(授权)命令、REVOKE(撤销)命令。
三、SQL语言编写规则
SQL关键字不区分大小写
对象和表名不区分大小写
字符值区分大小写
四、数据定义语言(DDL)
1、创建和维护数据表
1 --创建表 2 CREATE TABLE STUDENT 3 ( 4 STUID VARCHAR2(7) NOT NULL, 5 STUNAME VARCHAR2(10) NOT NULL, 6 STUADDRESS VARCHAR2(50) DEFAULT '地址不详' 7 ) 8 9 --增加和删除字段 10 ALTER TABLE STUDENT ADD (AGE NUMBER(2) NOT NULL); 11 12 ALTER TABLE STUDENT DROP COLUMN TELEPHONE; 13 14 ALTER TABLE STUDENT DROP (TELEPHONE,SEAT); 15 16 --修改表中字段的相关属性 17 ALTER TABLE table_name MODIFY column_name column_property 18 --示例 19 ALTER TABLE STUDENT MODIFY STUID VARCHAR2(10); 20 21 --重命名表 22 ALTER TABLE table_old_name RENAME table_new_name; 23 --示例 24 ALTER TABLE STUDENT RENAME STUDENTS; 25 26 --删除表 27 DROP TABLE table_name [cascade constraints] 28 --cascade constraints:表示如果该表存在约束、关联的视图和触发器等,则必须使用这个可选的子句 29 --示例 30 DROP TABLE STUDENT;
2、数据完整性和约束性
注:对约束的定义既可以在CREATE TABLE语句中定义,也可以使用ALTER TABLE 语句进行定义。
1 --非空约束 2 3 ALTER TABLE STUDENT MODIFY TELEPHONE NOT NULL; 4 5 --主键约束 6 ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(STUID) 7 8 9 --唯一约束 10 ALTER TABLE STUDENT ADD CONSTRAINT UN_TELPHONE UNIQUE(TELEPHONE); 11 12 --外键约束 13 --外键约束中被引用表列字段必须具有主键或唯一约束 14 --ON UPDATE CASCADE、ON DELETE CASCADE ON ADD CASCADE表示三种级联约束 15 ALTER TABLE table_name ADD CONSTRAINT 外键约束名 FOREIGN KEY(当前表列名) REFERENCES (被引用表名 列名) ON UPDATE CASCADE ON DELETE CASCADE ON ADD CASCADE; 16 --示例 17 ALTER TABLE STUDENT ADD CONSTRAINT FK_CLASSNO FOREIGN KEY(CLASSNO) REFERENCES(CLASS CLASSNO); 18 19 --检查约束 20 --设置STUDENT表字段的取值只能在20~28之间 21 ALTER TABLE STUDENT ADD CONSTRAINT CK_AGE CHECK(AGE BETWEEN 21 AND 28); 22 23 --禁用和激活约束 24 --禁用约束后,该约束就不起作用了,但它还存在于数据库中。 25 ALTER TABLE table_name DISABLE CONSTRAINT 约束名 26 --激活约束 27 ALTER TABLE table_name DROP CONSTRAINT 约束名 28 29 --删除约束 30 --约束删除后则不存在于数据库中了,无法激活使用。 31 ALTER TABLE table_name DROP CONSTRAINT 约束名
五、数据操纵语言(DML)
--简单查询 SELECT *[列名] 表达式 FROM 表名 WHERE 条件 ORDER BY 列名 --数据插入 INSERT INTO 表名(列名1,列名2...) VALUES (值1,值2...) --更新数据 UPDATE 表名 SET 列名 1=值,列名 2=值... WHERE 条件 --删除数据 DELETE FROM 表名 WHERE 条件。 --TRUNCATE --TRUNCATE是一个(DDL)命令,该命令可以一次性把表中的所有数据一次性全部删除 TRUNCATE TABLE 表名。
六、操作符
1、算数运算
算数运算只有+、-、*、/四个,其中除号的结果是浮点数
2、关系预算和逻辑运算
常见关系运算:
运算符 | 说明 | 运算符 | 说明 |
= | 等于 | > | 大于 |
<>或者!- | 不等于 | <= | 小于或者等于 |
< | 小于 | >= | 大于或者等于 |
逻辑预算符有三个:AND、OR、NOT
3、字符串连接符(||)
SELECT (ENAME || 'is a' || JOB) AS "Employee Dtails" FROM EMP WHERE SAL > 2000;
七、高级查询
1 --消除重复行 2 SELECT DISTINCT DEPTNO FROM EMP; 3 4 --NULL操作 5 --IS NULL 是值为空条件 6 --IS NOT NULL 是值不为空条件 7 SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL < 200 AND COMM IS NULL; 8 9 --IN操作 10 --对应IN操作的还有NOT IN ,用法一样,结果相反。 11 --SELECT ENAME,JOB,SAL FROM EMP WHERE job IN ('SALESMAN','PRESIDENT','ANALYSY'); 12 13 --BETWEEN...AND... 14 SELECT ENAME WHERE SAL BETWEEN 1000 AND 2000; 15 16 --LIKE模糊查询 17 -- 通配符"%"表示零个或多个任意字符 18 --通配符"_"表示一个任意字符。 19 SELECT JOB WHERE ENAME LIKE ‘J%S’; 20 21 --集合运算 22 --INTERSECT(交集),返回两个查询共有的记录。 23 --UNION ALL(并集),返回各个查询的所有记录,包括重复记录。 24 --UNION(并集),返回各个查询的所有记录,不包括重复记录。 25 --MINUS(补集),返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。 26 SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM EMP; 27 28 --子查询 29 --单行子查询 30 --如果内部查询不返回任何记录,则外部条件中字段DEPTNO与NULL比较永远为假,也就是说外部查询不返回任何结果。 31 --在单行子查询中外部查询还可以使用=、>、<、>=、<=、<>等比较运算符。 32 --内部查询返回的结果必须与外部查询条件中的字段(DEPTNO)匹配。 33 --如果内部查询返回多行结果则出现错误。 34 --对子查询还可以使用IN 和 NOT IN 操作符进行操作。 35 SELECT DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES') 36 --ANY子查询 37 SELECT ENAME WHERE SAL < ANY (SELECT SAL FROM EMP WHERE JOB = 'SALESMAN') 38 --ALL子查询