1 CREATE TABLE tb_student (
2 id INT PRIMARY KEY auto_increment, //主键约束,自动增长
3 NAME VARCHAR (18) NOT NULL, //非空约束
4 sex VARCHAR (2) check(sex = '男' or sex ='女'),
5 age INT CHECK (age>18 AND age<60), //检查约束
6 address VARCHAR (200),
7 email VARCHAR (200) UNIQUE, //唯一约束
8 tb_id int,
9 //外键约束, 自己的表名(自己的外键) REFERENCES 外部表名(字段)
10 //CONSTRAINT FOREIGN KEY 外键名【表名+约束】(外键) REFERENCES 主表(字段)
11 CONSTRAINT foreign KEY tb_student_fk(tb_id) REFERENCES tb_demp(id)
12 )
13
14 //建表之后添加外键约束
15 ALTER TABLE tb_student
16 ADD CONSTRAINT foreign KEY tb_student_fk(tb_id) REFERENCES tb_temp(id)
17
18 //设置自动增长
19 alter table tb_student
20 modify column id int auto_increment
21
22
23 SELECT * FROM tb_dept;
24 1,指明字段
25 2,全部字段
26 INSERT INTO tb_dept(NAME,loc,description) VALUES('开发部','广州','辅助')
27
28 INSERT INTO tb_dept VALUES(3,'财务部','广州','辅试试助')
29 3,插入多条
30 INSERT INTO tb_dept(NAME,loc,description)
31 VALUES('财务部','广州','辅试试助'),
32 ('财务部','广州','辅试试助'),
33 ('财务部','广州','辅试试助') ,
34 ('财务部','广州','辅试试助')
35
36 创建一张表和tb_dept表的结构一样,这种方式建表,值复制表结构,不复制约束
37 CREATE TABLE tb_dept2
38 SELECT * FROM tb_dept
39
40 不复制数据
41 CREATE TABLE tb_dept3
42 SELECT * FROM tb_dept WHERE id = 99
43
44 把tb_dept表中数据复制到tb_dept3中,只要这四个字段对应即可
45 INSERT INTO tb_dept3(id,name,loc,description)
46 SELECT id,name,loc,description FROM tb_dept
47
48 更新语句
49 UPDATE tb_student set age = 34
50 WHERE id = 3
51
52
53 delete from tb_demp;删除所有数据
54
55 删除有三种“:
56 delete ,可以回滚,保存记录,不删除表结构
57 truncate,不回滚,不删除表结构,
58 drop 直接删除,所有内容删除
59
60 select:
61 重复
62 SELECT DISTINCT deptno FROM tb_emp
63
64 between and >=,<=,
65
66 in、not in where mgr in(7902,222,12255) ,括号中包含的
67
68 like 模糊查询, select ename from tb_demp where ename like '_克%';
69 _表示一个字符
70 %表示0或者多个字符
71
72
73 order by 排序,按照sal从高到低
74
75 select * from tb_demp order by sal desc;
76
77 函数:
78
79 链接字符串 concat(str1,str2,...)
80 SELECT CONCAT(id,name,sex) FROM tb_student;
81
82
83 转换大小写: lower(小写),upper(大写)
84 SELECT LOWER(NAME) FROM tb_student;
85
86 SELECT upper(NAME) FROM tb_student;
87
88 返回字符串的长度:
89 SELECT LENGTH(NAME) FROM tb_student;
90
91 日期函数,
92 返回当前时间
93 SELECT now();
94
95 SELECT * FROM tb_emp
96 WHERE YEAR( hiredate) = 1981; 查询年= 1981年
97
98 ifnull函数,如果字段不为null,则取第二个值,如果为空,取第三个值
99 select comm,ifnull(comm,comm+100,100) as comm2 from tb_emp;
100
101 ifnull函数,如果字段不为null,则直接返回该值,如果为空,取第二个
102 select comm,ifnull (comm,100)as comm2 from tb_demp;
103
104 条件判断语句:
105 select ename,job,sal,comm'原定奖金'
106 case
107 when comm is null then 1000
108 else comm
109 end as'奖金'
110
111 from tb_demp;
112
113 聚合函数:
114
115 AVG 平均数
116 SUM 总数
117 MAX 最大数
118 MIN 最小数
119 count 统计
120
121 group by 分组,
122 分组之后不能用where,换成having,
123 having是分组之后再进行筛选 ,where和having都是用来做条件限定的,但having只能用在groupby之后
124
125 order by 排序,放在having之后
126
127 select deptno ,avg(sal),max(sal),min(sal),sum(sal),count(1)
128 from tb_demp
129 group by deptno
130 having avg(sal)>200
131 order by avg(sal) asc;
132
133
134 limit,常常用来分页,
135 select limit offset start ,row_count
136 offset_start: 第一个返回记录行的偏移量,默认为0,
137 row_count:要返回记录行的最大数目
138
139 select * from tb_demp limit 5; 检索前五个记录
140 select * from tb_demp limit 5,10; 检索记录行6-10的记录
141
142
143 select 基本语法:
144 select selection_list 选择哪些列
145 from table_list 从何处选择行
146 where primary_constarint 行必须满足什么条件
147 group by grouping_colimns 怎么样对结果分组
148 having secondart_constraint 行必须满足的第二个条件
149 order by sorting_columns 怎么样对结果排序
150 limit offset_start row_count 结果限定
151
152
153 多表连接查询:
154 #交叉连接:
155
156 select count(*) from tb_emp; #17
157
158 select count(*) from tb_demp; #4
159
160 select * from tb_emp,tb_dept #68 = 17*4
161
162 select * from tb_emp cross join tb_dept;
163
164
165 内连接:连接条件就是主外键关联
166 select * from tb_demp e,tb_demp d where e.deptno = d.deptno;
167
168 select * from tb_dept inner join tb_emp
169 on tb_dept.deptno = tb_emp.deptno;
170
171 外连接:(不仅列出与连接条件相匹配的行,还列出左表,右表或者两个表中所有符合where过滤的数据行)
172
173 在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中的一个表的行,
174 而不限制另一个表
175
176 左外连接:
177 tb_dept 做主表,左边的表为主表,左边的记录全部显示,如果没有找到记录则补null
178
179 select * from tb_dept left join tb_emp
180 on tb_dept.deptno = tb_emp.deptno;
181
182 orcale :
183 select * from tb_emp e,tb_dept d where e.deptno = d.deptno(+)
184
185
186
187 自连接:
188
189 select c.name '类别名',c2.name'父类别名'
190 from tb_course c left join tb_course c2
191 on c.pid = c2.id;
192
193 select c.name '类别名',c2.name'父类别名'
194 from tb_course c , tb_course c2
195 where c.pid = c2.id;
196
197
198
199 索引:
200 作用:在数据库中来加速对表的查询
201 创建:自动在主键和唯一键上面创建索引
202
203 手动创建:create index index_tb_student_name
204 on tb_student(stu_name)
205
206 使用索引,在where之后加上索引,提高查询效率
207
208 视图:(使复杂查询变得简单)
209
210 create view emp_v_10 as
211 select empno as 部门编号,ename 员工姓名,sal 工资
212 from tb_emp
213 where deptno = 10;
214
215 select * from emp_v_10;
216
217
218
219
220
221 set @i=1;
222
223
224 select @i;