1 CREATE TABLEtb_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) REFERENCEStb_demp(id)12 )13
14 //建表之后添加外键约束15 ALTER TABLEtb_student16 ADD CONSTRAINT foreign KEY tb_student_fk(tb_id) REFERENCEStb_temp(id)17
18 //设置自动增长19 alter tabletb_student20 modify column id intauto_increment21
22
23 SELECT * FROMtb_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 INTOtb_dept(NAME,loc,description)31 VALUES('财务部','广州','辅试试助'),32 ('财务部','广州','辅试试助'),33 ('财务部','广州','辅试试助') ,34 ('财务部','广州','辅试试助')35
36 创建一张表和tb_dept表的结构一样,这种方式建表,值复制表结构,不复制约束37 CREATE TABLEtb_dept238 SELECT * FROMtb_dept39
40 不复制数据41 CREATE TABLEtb_dept342 SELECT * FROM tb_dept WHERE id = 99
43
44 把tb_dept表中数据复制到tb_dept3中,只要这四个字段对应即可45 INSERT INTOtb_dept3(id,name,loc,description)46 SELECT id,name,loc,description FROMtb_dept47
48 更新语句49 UPDATE tb_student set age = 34
50 WHERE id = 3
51
52
53 delete fromtb_demp;删除所有数据54
55 删除有三种“:56 delete,可以回滚,保存记录,不删除表结构57 truncate,不回滚,不删除表结构,58 drop直接删除,所有内容删除59
60 select:61 重复62 SELECT DISTINCT deptno FROMtb_emp63
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) FROMtb_student;81
82
83 转换大小写: lower(小写),upper(大写)84 SELECT LOWER(NAME) FROMtb_student;85
86 SELECT upper(NAME) FROMtb_student;87
88 返回字符串的长度:89 SELECT LENGTH(NAME) FROMtb_student;90
91 日期函数,92 返回当前时间93 SELECTnow();94
95 SELECT * FROMtb_emp96 WHERE YEAR( hiredate) = 1981; 查询年=1981年97
98 ifnull函数,如果字段不为null,则取第二个值,如果为空,取第三个值99 select comm,ifnull(comm,comm+100,100) as comm2 fromtb_emp;100
101 ifnull函数,如果字段不为null,则直接返回该值,如果为空,取第二个102 select comm,ifnull (comm,100)as comm2 fromtb_demp;103
104 条件判断语句:105 select ename,job,sal,comm'原定奖金'
106 case
107 when comm is null then 1000
108 elsecomm109 end as'奖金'
110
111 fromtb_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 fromtb_demp129 group bydeptno130 having avg(sal)>200
131 order by avg(sal) asc;132
133
134 limit,常常用来分页,135 selectlimit offset start ,row_count136 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 selectselection_list 选择哪些列145 fromtable_list 从何处选择行146 whereprimary_constarint 行必须满足什么条件147 group bygrouping_colimns 怎么样对结果分组148 havingsecondart_constraint 行必须满足的第二个条件149 order bysorting_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 jointb_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 jointb_emp169 on tb_dept.deptno =tb_emp.deptno;170
171 外连接:(不仅列出与连接条件相匹配的行,还列出左表,右表或者两个表中所有符合where过滤的数据行)172
173 在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中的一个表的行,174 而不限制另一个表175
176 左外连接:177 tb_dept 做主表,左边的表为主表,左边的记录全部显示,如果没有找到记录则补null178
179 select * from tb_dept left jointb_emp180 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 jointb_course c2191 on c.pid =c2.id;192
193 select c.name '类别名',c2.name'父类别名'
194 fromtb_course c , tb_course c2195 where c.pid =c2.id;196
197
198
199 索引:200 作用:在数据库中来加速对表的查询201 创建:自动在主键和唯一键上面创建索引202
203 手动创建:create indexindex_tb_student_name204 ontb_student(stu_name)205
206 使用索引,在where之后加上索引,提高查询效率207
208 视图:(使复杂查询变得简单)209
210 create view emp_v_10 as
211 select empno as部门编号,ename 员工姓名,sal 工资212 fromtb_emp213 where deptno = 10;214
215 select * fromemp_v_10;216
217
218
219
220
221 set @i=1;222
223
224 select @i;