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;