MySQL

打印 上一主题 下一主题

主题 545|帖子 545|积分 1635

1.DML 数据管理语言(对数据增删改)

1.新增

1.指定列添加数据

自动递增列可以不指定数据,当有一个数跳跃很大的时间,也不会不起中间数值,会从最大数值开始递增
添加一行数据用value
  1. insert into staff(id,code,name,salary) value(1,'1001','gejunjie',1000000);
  2.             -- 添加一行
复制代码
可以指定枚举行添加数据 
  1. insert into staff(code,name) value ('1003','libai');
复制代码
也可以不指定枚举行添加数据,但是这个时间需要将每个列都指定值 
  1. insert  into staff value(5,'1004','dufu',10000);
复制代码
2.添加多行数据

添加多行数据用values
  1. insert into staff(code,name,salary) values ('1002','tuoshaokai',1000000),('1003','duanxiaosong',1000000);-- 添加多行
复制代码
2.修改

修改利用update
下面就使update,分别是把id=5的name改为”liqingzhao“,把name=liqingzhao的工资上涨2000,把id=5的工资降落2000,名字改为苏轼
  1. update staff set name='liqingzhao' WHERE id=5;
  2. update staff set salary=salary+2000 where name='liqingzhao';
  3. UPDATE staff set salary=salary-2000,name='苏轼' WHERE id=5;
复制代码
3.删除

删除某一列的某个值利用delete,只有删除表的时间才利用drop
  1. delete FROM staff where id=1;
复制代码
清空表
1.delete from staff;       是删除每一行数据,后面可以有where语句
2. truncate staff;           清空表,如果数据量比力大,可以用这个,性能优异
2.MQL 数据查询语言(查询)

1.查看当前时间

  1. select now();
复制代码
2.查询表格(指定列名)

  1. select name,salary from staff;
复制代码
3.查询全部列

  1. select * from staff;
复制代码
4.利用as指定别名  列 方法结果  表  视图

  1. SELECT name as `姓名` from staff;
复制代码
5.利用where语句

利用where查找不便是2的
  1. SELECT * from staff WHERE id!=2;
  2. SELECT * from staff WHERE id <> 2;
复制代码
 查找大于的或者小于的
  1. SELECT * FROM staff WHERE id>2;
  2. SELECT * FROM staff where id<2;
  3. SELECT * from staff WHERE id>=2;
复制代码
6.多条件   and/or

  1. SELECT * from staff where id<=4 AND salary >=10000;
  2. SELECT * FROM staff WHERE salary>10000 OR salary <5000;
复制代码
7.查找  in/not in

  1. 查询多个的时候,可以使用or一个一个写,但是很麻烦,所以可以使用in
  2. SELECT * from staff where id=1 or id=3 .......;
  3. SELECT * from staff WHERE id in (1,2,3);
  4. SELECT * from staff where id NOT IN(1,3);
复制代码
8.bewteen and

只能用在数值的范围判断  两个范围边界也包含着,会查询出
  1. SELECT * from staff where salary between 500 and 600;
  2. //这样查询的是[500,600]
复制代码
9.模糊查询

模糊查询有两种方式可以利用%也可以利用_作为占位符,%体现任意个数个字符
  1. SELECT * from staff where name LIKE '%l%';
  2. -- 查询姓张的员工
  3. SELECT * from staff where name like '张%';
  4. -- 查询张某
  5. SELECT * FROM staff where name like '张__';
  6. -- 写一个就是张某,写两个_就是张某某
复制代码
10.是否存在  exists

得到的结果雷同于一把锁,只要括号内查到内容就会给结果,查不到内容就不给结果
  1. SELECT * FROM staff where EXISTS(SELECT * from staff where id=2);
复制代码
11.any   all

  1. SELECT * from staff where salary >ANY(SELECT code from staff);
  2. //any是只需要salary大于code中任意一条数据就可以
  3. SELECT * from staff  where salary >all(SELECT code from staff);
  4. //需要salary中的工资大于code中所有的数据
复制代码
12.排序   从小到大:order by     正序:asc      倒序:desc

越往前放优先级越高,当存放的两条数据雷同时才看后边的排序序次,当没有指定排序方式的时间,默认就是asc
  1. SELECT * FROM staff ORDER BY salary
  2. SELECT * from staff order by salary asc;
  3. SELECT * FROM staff ORDER BY salary DESC;
复制代码
13.拼接   union/union All

利用union拼接的的时间拼接的数据数量必须相称,union会去重(即把雷同的结果去掉)
ubion ALL不会去重,将重复的也全部查询出来
  1. SELECT name,salary from staff UNION
  2. SELECT code,name from staff;
复制代码
 其次,去重也可以利用distinct方法
  1. - 去重   对整个查询结果去重
  2. SELECT DISTINCT salary FROM staff;
  3. SELECT DISTINCT salary,name FROM staff;
复制代码
14.部分查询    limit count /limit start  count

limit start count 中start是查询的起始位置(下标),count是数量
  1. SELECT * from staff order BY salary desc limit 3;
  2. SELECT * from staff order BY salary desc limit 2,2;
复制代码
15.case when then

这个可以用两个方式
1.范围判断
  1. SELECT * ,
  2. case
  3. WHEN salary<15000 THEN '低'  
  4. WHEN salary>=15000 and salary<=20000 then '薪资正常' ELSE '薪资较高'  
  5. end  
  6. FROM staff;
复制代码
2.数值匹配(数值重复率高的时间可以利用这个)
  1. SELECT * ,CASE salary
  2.         WHEN 10000 THEN
  3.           '还行'
  4.     WHEN 15000 THEN
  5.     '还可以'
  6.     WHEN 18000 THEN
  7.     '挺高'
  8.     WHEN 1000000 THEN
  9.     '牛逼'       
  10. END as `level` FROM staff;
复制代码
16.聚合函数(紧张!!!记住)

聚合函数是将多个数据聚合成一个数据
聚合函数的null值问题,要留意,也大概会出现在面试题里面
1.最大值

  1. SELECT max(salary) from staff;
复制代码
2.最小值

  1. SELECT MIN(salary) from staff;
复制代码
3.平均数

(在盘算平均数的时间,如果里面是null,会派出掉这个数据)
  1. SELECT AVG(salary) from staff;
复制代码
4.求和

  1. SELECT sum(salary) FROM staff;
复制代码
5.求个数

(在盘算个数的时间,如果里面是null,会派出掉这个数据,不算在内)
如果想盘算出来可以利用count(*),这个时间会盘算null值
  1. SELECT COUNT(salary) from staff;
复制代码
17.分组查询 

分组查询职能和聚合函数一起利用
比如查询每一个部分的平均薪资和综合薪资
  1. SELECT department,AVG(salary) AS 平均薪资,SUM(salary) as 薪资综合 from staff GROUP BY department;
复制代码
分组查询也可以用于筛选
having对分组之后的数据再筛选,这个可以利用聚合函数
也就是说下面这个语句的序次是先group by分组,然后是跟局分组结果举行查询(利用having),最后是选出department
  1. SELECT department from staff group by department HAVING AVG(salary)<50000;
复制代码
18.联合查询

连接查询
查询老师的姓名以及教授的课程
要分别从teacher表查出 Tname ,course表查出cname
这个时间要靠teacher.Tid=coures.Tid联合起来
  1. SELECT Tname,cname from teacher LEFT JOIN course ON teacher.TId=course.TId;
复制代码
as可以起别名
  1. SELECT a.Tname,b.Cname from teacher as a left JOIN course as b on a.TId=b.TId;
  2. SELECT a.Tname,b.Cname from teacher as a RIGHT JOIN course as b on a.TId=b.TId;
复制代码
连接查询:外连接  内连接

外连接:

1.左外连接(left join):左表为主表,全部数据都会体现,右表是副表,只会体现和主表内容有关系的数据
2.右外连接(right join):右表为主表,与左外连接相反
  1. SELECT a.Tname,b.Cname from teacher as a left JOIN course as b on a.TId=b.TId;
  2. SELECT a.Tname,b.Cname from teacher as a RIGHT JOIN course as b on a.TId=b.TId;
复制代码
3.全外连接(full join):这个MySQL不支持,但是可以是用其他方法实现,左外连接union右外连接(因为union会去重,所以union之后就是full union的结果)
内连接:inner join(也可以简化成join)

内连接只会体现有对应关系的数据
  1. SELECT a.Tname,b.Cname from teacher as a INNER JOIN course as b on a.TId=b.TId;
复制代码
交叉连接
  1. SELECT * from teacher, course;
  2. SELECT * from teacher a, course b WHERE a.TId=b.TId;
复制代码
子查询

子查询要只管少用,用得太多会占用内存
子查询有两种
  1. SELECT sname from student where sid in(SELECT sid from sc where score <60);
  2. 这个是把查出的数据按照一个表执行新查询
  3. SELECT sname from (SELECT * from student where sid=01) as a;
复制代码
多张表连接查询:
查询学过张三老师的课程的学生信息:
  1. SELECT a.* from student AS A LEFT JOIN sc b A.SId=b.SId
  2. LEFT JOIN
  3. course c ON c.CId=b.CId
  4. LEFT JOIN teacher d on c.TId=d.TId
  5. WHERE d.Tname='张三';
复制代码
行列转换


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表