mysql看视频笔记

  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  innot 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;

 

posted @ 2015-10-10 12:24  暗夜小精灵~~  阅读(227)  评论(0编辑  收藏  举报