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;
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
5S管理活动工作总结自20xx年x月我厂开展5S管理活动以来,各单位精心组织,积极行动,各阶段工作进展有序并顺利完成,获得了全体员…
5S管理指的是企业中的每名工作人员都需要养成自觉遵守以及合理维护标准程序的生产习惯。5S管理维持的目的是通过企业员工自觉的遵守企业…
5S成果发表会致辞尊敬的吴老师,健峰嘉宾以及各位同事:下午好。今天是我们公司5S的成果发表会,公司从去年x月份引进健峰公司5S现场…
5S现场管理总结20xx年x月份,我司在高管的正确领导下,根据5S现场管理工作要求,以“巩固劳动成果、提高管理水平”为方针,加强5…
有效实施“5S”管理活动大力提升基层管理水平现有正式职工22人,其中党员1人,预备党员1人,团员7人,具有专科以上学历16人。下设…
SQL总结数据库1查询数据Select列名From表名where查询条件2增加数据Insertinto表名(列名)values(值…
SQL总结1、数据定义(createtableAltertable)请先新建并打开某个数据库,再做如下操作例1:createtab…
总结一个星期前老师给了一个任务,要求用GUI做成一个simulink仿真界面,通过matlab与SQL的连接,然后把仿真结果存到s…
123456789101112131415161718192021222324252627282930313233343536al…
第一章数据的检索第一节SELECT基本用法1、简单的数据检索?“取出一张表中所有的数据”是最简单的数据检索任务,完成这个最简单任务…