SQL总结

SQL学习总结: 一.创建表:

1.创建表一般格式为:

CREATE TABLE 表名(

列名 数据类型 [DEFAULT 缺省值] [NOT NULL] [ UNIQUE] [CHECK(条件)]

PRIMARY KEY(列名 [,列名] …)

FOREIGN KEY (列名 [,列名] …)REFERENCES 表名 (列名 [,列名] …)]

常用完整性约束

主码约束: PRIMARY KEY

唯一性约束: unique

非空值约束:NOT NULL

参照完整性(外键)约束: FOREIGN KEY…REFERENCES …

用户自定义约束: check

设置该列默认直:default

例1 create table 成绩表

(

姓名 nvarchar(5) not null,

外语 int ,

计算机 int ,

总分 int,

评价 nvarchar(8) default'好',

PRIMARY KEY (姓名),

check( 数学 between 0 and 100 and 语文 between 0 and 100 and 外语 between 0 and 100 and 计算机 between 0 and 100)

);

2.修改表:

ALTER TABLE 表名 [ADD] 增加新列

[DROP COLUMN ] 删除列

[ALTER COLUMN] 修改列定义

例: alter table 通信录 add年龄 int

alter table 成绩表 add 性别 nvarchar(2)

alter table通信录drop column

alter table通信录 alter column 职务 nvarchar(5)

3.删除表:

(1):

truncate table 通信录; <删除所以行>

drop table 通信录; 《删除表》

(2):

DELete from 通信录

where 性别='是' ;

delete from 通信录

where 手机 is null;

delete from 通信录;

一、查询语句(SELECT)

1、一般用法:

SELECT Column FROM Table;

例1:

--从员工表里,选择姓名和工资

SELECT last_name, salary FROM employees; 例2:

--从员工表里,选择姓名和邮件,并将两列数据合成一列,以"员工邮件"为列名显示

SELECT last_name + ' 的电子邮件是: ' + last_name + [email=]'@testage.com'[/email] AS

"员工电子邮件详细信息" FROM employees;

2、过滤重复行:

SELECT DISTINCT Column FROM Table;

例:

--统计员工表里的工种分为几类

SELECT DISTINCT job_id FROM employees;

3、增加选择条件:

SELECT Column FROM TableWHERE condition;

例1:

--从员工表里,选择工资高于5000的员工

SELECT last_name, salary FROM employees WHERE salary > 5000;

例2:

--从员工表里,选择工资高于5000,并且属于80号部门的员工

SELECT last_name, salary, department_id

FROM employees WHERE salary > 5000 AND department_id = 80;

例3:

--从员工表里,选择工资高于8000,或者属于80号部门的员工

SELECT last_name, department_id, salary 高于8000或者属于80号部门的员工

FROM employees WHERE salary > 8000 OR department_id = 80;

例4:

--从员工表里,选择年薪低于36000,并且没有奖金的员工信息

SELECT salary*xx年薪, *

FROM employees WHERE salary*12 < 3000*12 AND commission_pct IS NULL;

例5:

--从员工表里,选择工资在3000到5000之间(包含3000和5000)的员工信息 SELECT * FROM employees WHERE salary BETWEEN 3000 AND 5000;

例6:

--从员工表里,选择属于20号部门,30号部门,80号部门的员工

SELECT last_name, department_id

FROM employees WHERE department_id IN(20, 30, 80);

--where条件另一种写法:

WHERE department_id = 20 OR department_id = 30 OR department_id = 80;

例7:

--从员工表里,选择不属于20,30,80号部门的员工

SELECT last_name, department_id

FROM employees WHERE department_id NOT IN(20, 30, 80);

4、模糊查询:

SELECT Column FROM Table WHERE keywords LIKE %_;

例1:

--从员工表里,选择姓名以B打头的所有员工信息

SELECT * FROM employees WHERE last_name LIKE 'B%';

例2:

--从员工表里,选择姓名第二个字母是a的所有员工信息

SELECT * FROM employees WHERE last_name LIKE '_a%';

例3:

--从员工表里,选择姓名以A或B或C打头的员工信息

SELECT * FROM employees WHERE last_name LIKE '[A-C]%';

5、多表查询:

SELECT Table1.Column, Table2.Column FROM Table1, Table2 WHERE Condition; 例1:

--查询员工表里,所有员工所属的部门名字

SELECT employees.last_name, department.department_name

FROM employees, department

WHERE employees.department_id = department.department_id;

例2:

--查询查询工资高于8000的员工所属的部门

SELECT e.last_name, e.salary, d.department_name FROM employees e

INNER JOIN department d

ON e.salary > 8000 AND e.department_id = d.department_id;

例3:

--查询所有员工所属的部门,即使该员工没有被分配任何部门

SELECT e.last_name, d.department_name FROM employees e

LEFT OUTER JOIN department d ON e.department_id = d.department_id;

例4:

--查询每个部门所属的员工,即使该部门没有任何员工

SELECT d.department_name, e.last_name FROM employees e

RIGHT OUTER JOIN department d ON e.department_id = d.department_id;

例5:

--查询所有部门以及所有员工,即使该部门没有任何员工或该员工没被分配任何部门 SELECT e.last_name, d.department_name FROM employees e

FULL OUTER JOIN department d ON e.department_id = d.department_id;

例6:

--查询员工Baida的经理是谁

SELECT e.last_name 雇员, m.last_name 经理

FROM employees e, employees m

WHERE e.manager_id = m.employee_id AND e.last_name = 'Baida';

二、组函数(AVG()、SUM()……)、分组函数(GROUP BY)、排序(ORDER BY)

1、组函数:

AVG(Column)

例:

--统计全体员工的平均工资

SELECT AVG(salary) 平均工资 FROM employees;

SUM(Column)

例:

--统计工资支出总额

SELECT SUM(salary) 工资支出总额 FROM employees;

MAX(Column)

例:

--统计最高工资

SELECT MAX(salary) 最高工资 FROM employees;

MIN(Column)

例:

--统计最低工资

SELECT MIN(salary) 最低工资 FROM employees;

COUNT(Column)

例:

--统计员工总数

SELECT COUNT(employee_id) 员工总数 FROM employees;

2、分组函数:

GROUP BY Column HAVING Condition

例:

--统计员工平均工资高于10000的部门

SELECT AVG(salary), department_id

FROM employees

GROUP BY department_id HAVING AVG(salary) > 10000;

3、排序:

ORDER BY

例1:

--将员工工资按升序排列

SELECT last_name, salary FROM employees ORDER BY salary;

例2:

--按员工入职时间长短降序排列

SELECT last_name, hire_date FROM employees ORDER BY hire_date DESC; 例3:

--查找工资最高的前三名员工

SELECT TOP 3 salary, last_name FROM employees ORDER BY salary DESC;

三、子查询

SELECT Column FROM Table WHERE express operator

(SELECT Col FROM Tab WHERE condition);

例1:

--查找工资与Jones工资相同的员工信息

SELECT * FROM employees

WHERE salary = (SELECT salary FROM employees WHERE last_name = 'Jones'); 例2:

--查找员工表里,工资最高的员工的所有信息

SELECT * FROM employees

WHERE salary = (SELECT MAX(salary) FROM employees );

例3:

--查找最高工资高于10000,并且最低工资低于4000的部门

SELECT DISTINCT department_name FROM department

WHERE department_id IN

(SELECT department_id

FROM employees

GROUP BY department_id HAVING MAX(salary) > 10000

AND MIN(salary) < 4000);

例4:

--选出表中后10行

SELECT * FROM employees

WHERE employee_id NOT IN

(SELECT TOP ((

(SELECT COUNT(employee_id) FROM employees)) - 10)

employee_id FROM employees);

四、增加(INSERT INTO Table(..) VALUES=(..))

删除(DELETE FROM Table)

更改数据(UPDATE Table SET Column=key)

1、增加、插入数据:

INSERT INTO Table (Column1, Column2……) VALUES (Element1, Element2……); 例1:

--向部门表里插入编号为101的人事部

INSERT INTO department VALUES (101, '人事部', NULL, NULL);

例2:

--向员工表里插入编号为999,名字叫“测试时代”的新员工

INSERT INTO employees (employee_id, last_name) VALUES (999, '测试时代');

2、删除数据:

DELETE FROM Table WHERE Condition;

例:

--删除部门表里标号为101的部门

DELETE FROM department WHERE department_id = 101;

3、更新数据:

UPDATE Table SET Column = Value WHERE Condition;

例:

--将部门号为80的部门,改为部门号为101,部门名为”人力资源部“

UPDATE department SET department_id = 101, department_name = '人力资源部' WHERE department_id = 80;

 

第二篇:sql总结

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36 alter table 表名 [add 子句] [drop 子句] 创建表: create table 表名( 列名 数据类型 [default 缺省值] [not null] [,列名 数据类型 [default 缺省值] [not null]] . . . . . . [,primary key(列名 [,列名] …)]主键(多个值作为联合主键) [,foreign key (列名 [,列名] …) 外键 references 表名 (列名 [,列名] …)]外间关联表 [,unique(列名 [,列名] …)]不允许重复列 [,check(条件)])约束条件 如: create domain person_name char(20)(定义域) create table PROF ( PNO char(10),--职工编号 PNAME person_name not null, --职工姓名 SAL int, --工资 AGE int, --年龄 DNO char(10), --主任职工编号 primary key (PNO), --主键 foreign key (DNO) references DEPT(DNO),外键关联 简单定义表: create table CIA ( NAME varchar(50) primary key, ) REGION varchar(50) not null default ‘region not formalized yet', AREA int null, POPULATION long null, GDP long not null 修改表: 增加新列 删除列 [modify 子句] 修改列定义 Add列不为空是需加默认值(缺省值) 修改列定义时先建一修改后的新列,复制要修改的原列,删除修改的原列 37

38 索引的定义 create [unique|distinct] [cluster] index 索引名

40

41

42

43

44

45

46

47

48

49

50

51

52 unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新。 cluster:聚簇索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引。 asc|desc:索引表中索引值的排序次序,缺省为asc。 ? 示例: create cluster index g-index on CIA(REGION) 删除索引: drop index 索引名 sql查询 1、 sum 总和 avg平均 distinct/unique 去重 asc 升序| desc降序 2、 select name case when age>60 then 1 when age<60 then 2 end age from table1. 3、 SELECT last_name +' is a ‘+ job_id AS "Employee Details" FROM employees; 53 54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72 4、 escape 转义字符的使用:db2,oracle均可用 例:select * from rpt_plain_define where rpt_id like '%\_%' escape '\'; 5、 order by 排序: order by age asc 升序 order by desc 降序 order by 2 按select查询第三个字段排序 6、集合 集合并:union ? 求选修了001或002号课程的学生号。 (select SNO from SC where CNO = 001) union all (select SNO from SC where CNO = 002) 默认去重 集合交:intersect 集合差: except Table1 except table2 得到table1中有,而table2中没有的记录 求选修了001和002号而没有选003号课程的学生号。 (select SNO from SC where CNO = 001 or CNO = 002 ) except (select SNO from SC

74

75

76

77

78

79

80

81 § 聚集函数 ? 平均值:avg ? 最小值:min ? 最大值:max ? 总和:sum ? 记数:count 聚集函数后跟group by …having… (单个字段查询不需要:SELECT MAX(SALARY) FROM EMPLOYEES) 82

83

84

85

相关推荐