数据库(三)

DML (Data Manipulation Language)

  • 数据操做语言, 用来操做数据库表中的记录
  • 用来操做表中的数据. 对表中记录的建立, 修改和删除sql

一.插入数据

1,插入单条数据

语法:insert into 表名称(column1,column2,...)values(value1,value1,...);数据库

代码:insert into student(id, name)values(1,'tom');函数

2.在有参数都提供, 能够忽略列名

2.1插入单条数据spa

insert into student values(2,‘coco’);blog

2.2插入多条数据排序

insert into student values(2,‘coco’), (3,'bobo') , (4,'vivi');ip

二.数据修改

1.单条数据修改

语法:update 表名称 set 列名1=列值, 列名2=列值2 where 列名=列值it

代码:update student set name=‘tom’ , age=12 where id=1;io

2.批量数据修改

2.1:将学生全部的age改成18基础

update student set age =18;

2.2:将学生全部的age+1

update student set  age=age +1;

三.数据删除

1,删除一列

语法:delete from 表名称 where 列名=列值;

代码:delete from student where id=1;

2.删除表中全部的记录

delete from student;


DQL (Data Query Language)

  • 数据查询语言, 用来查询数据库表中的记录
  • 执行DQL语句不会改变数据库原始数据, 而是让数据库发送结果集给客户端查询返回的结果集是一张虚拟表

一.查询关键字

关键字:select

二.基础语法

SELECT 要查询的列 FROM 表名

WHERE 行条件

GROUP BY 对结果分组

HAVING 分组后的行条件

ORDER BY 对结果排序

LIMIT 结果限定

三.经常使用操做

1 基础查询

查询students表中全部数据:SELECT  *  FROM  students;

查询指定列:SELECT  id ,  gender  FROM  students ;


 

2 条件查询

概述:在查询时经过 WHERE 子句给出查询条件, WHERE子句可使用到的运算符:

关系运算:

=, !=, <>, <, <=, >, >=  (<>!=用法相同)。

BETWEEN 20 AND 40      20<=<=40

IN('a', 'b', 'c')       值包含在集合中。

NULL判断:IS NULL, IS NOT NULL 判断是否为NULL

逻辑运算:AND, OR, NOT , ,

案例1:查询年龄在15岁至20岁之间的学生

SELECT * FROM student WHERE age BETWEEN 15 AND 20;

案列2:查询年龄不等于3和年龄不等于11的学生(and,或not in分别实现)

select * from student where age!=3 and age !=11;
select * from student where age not in(3,11);

案列3:查询年龄大于10的学生

select * from student where age>10;

 


 

3 模糊查询

关键字:like

 

使用的通配符: _ 匹配任意一个字符     _b

                         % 匹配任意0~n个字符

 

案例1:查询名字中包含字母A的学生: SELECT * FROM students WHERE  name  LIKE  '%A%' ;

案列2:查询名字字母B开头的学生: SELECT * FROM students WHERE  name  LIKE  'B%' ;

案列3:查询名字为Cxxxx的学生: SELECT * FROM students WHERE  name  LIKE  'C_%' ;


 

4 字段控制

关键字: DISTINCT(去重), AS(别名)   函数: IFNULL()

 

案例:

1、查询雇员薪资, 使用DISTINCT去除重复记录

SELECT DISTINCT salary FROM employee;

 

二、查询雇员薪资和奖金之和

  SELECT *, salary+bonus FROM employee;

 

三、bonusNULL, 任何值和NULL相加仍是NULL,须要使用 IFNULL() 函数将NULL转换成数值0

  SELECT *, salary+IFNULL(bonus, 0) FROM employee;

 

四、此时列名出现了 salary+IFNULL(bonus, 0), 很不美观,能够用 AS 关键字取一个别名

  SELECT *, salary+IFNULL(bonus, 0) AS total FROM employee;


5 排序和聚合

1、 排序:使用关键字能够给查询结果排序, 有两种排序方式

关键字:ORDER BY   

结果:asc  升序(默认)  从小到大

          desc 降序   从大到小

案例:查询全部学生, 按年龄降序排列:SELECT * FROM students ORDER BY age DESC;

二、聚合

概述,聚合函数用来作纵向运算,

分类:

计数COUNT

最大值MAX

最小值MIN

求和SUM

求平均值AVG

 

案例:

一、查询工资+奖金大于2500的员工人数:

SELECT COUNT(*) FROM employee WHERE  salary+IFNULL(bonus, 0) > 2500;

 

二、查询员工最高工资和最低工资

SELECT MAX(salary), MIN(salary) FROM employee;

 

3、 查询员工总工资和平均工资

SELECT SUM(salary), AVG(salary) FROM employee;


6 分组查询

概述:使用 GROUP BY 子句作分组查询, 分组查询通常和聚合函数一块儿使用

案例:

1.将查询结果根据年龄分组

Select age from students group by age;

 2.或者指定分组条件的位置

Select age from students group by 1;

Select id,age from students group by 2;

3.查询全部年龄大于15 的人的总数

Select age count(*) from students where age>15 group by age;

 


7HAVING子句

概述:HAVING子句也是用来过滤查询条件的

案例:查询总工资大于9000的全部部门, 部门总工资, 和部门总员工数

SELECT department, SUM(salary), COUNT(*)

FROM employee

GROUP BY department

HAVING SUM(salary)>9000;

注意 having后面能够添加聚合函数或者属性字段 若是添加字段,name字段必须在语句中出现

WHEREHAVING的区别:

1.WHERE是在分组(GROUP BY)前过滤数据; HAVING是在分组( GROUP BY)后过滤数据

2.WHERE子句不可使用聚合函数; HAVING子句可使用聚合函数

3.WHERE条件查询,针对于本地文件,不能够查询结果集;HAVING条件查询能够查询结果集

 


 

8分页查询

概述:使用 LIMIT 关键字能够用来限定查询结果的起始行和总行数

案例1:从第一行开始, 查询5条记录

SELECT * FROM employee LIMIT 0, 5;(参数一:从几行开始;参数二:查询几条数据)

分页查询: 可使用LIMIT实现分页功能, 例如一页10条记录, 则有

SELECT * FROM employee LIMIT 0, 10; -- 第一页数据

SELECT * FROM employee LIMIT 10, 10; -- 第二页数据

SELECT * FROM employee LIMIT 20, 10; -- 第三页数据

案列2:查询前5条记录

SELECT * FROM employee LIMIT 0, 5;(LIMIT n 等价于 LIMIT 0,n)

注意: LIMIT不属于标准的SQL语法, MySQL支持, 其它DBMS不必定支持.

 书写顺序

where ,group by , having , order by, limit

 

union查询

 union查询:就是把多条sql语句的查询结果合并成结果集;

注意:

1.若是 两张表查询出来的数据,有彻底同样的,那么union会默认的把他合并成一条数据;能够用union all 解决

2.使用union查询的时候,两个sql的列数必须一致,可是列名能够不同,若是列名不同,以第一条sql为准

3.在union字句中不须要用order by排序,可直接在最后进行排序

 子查询

子查询:将一条sql语句的结果,做为另外一个sql语句的查询条件 或者查询中间表

案列1:查询出最新一行商品(以商品编号最大为最新,用子查询实现)

           select * from goods where goods_id =(select max(goods_id) from goods);

案列2:查询出编号为19的商品的栏目名称(用左链接查询和子查询分别)

           select cat_name from category  where cat_id=(select cat_id from goods where goods_id =19);

案列3:用where型子查询把goods表中的每一个栏目下面最新的商品取出来

           select *from goods where goods_id in(select max(goods_id) from goods group by cat_id);

案列4:用from型子查询把goods表中的每一个栏目下面最新的商品取出来(用from型子查询必须取别名

           select *from (select * from goods ORDER BY goods_id DESC) as temp GROUP BY cat_id;

相关文章
相关标签/搜索