mysql 02_MySQL02

MySQL的DML与DQL

一、DML数据定义语言

DML语句主要用于对Table表格中的数据进行操作

insert 插入数据

update 修改数据

delete 删除数据

1、INSERT 插入数据

1>向所有列插入数据

语法:

INSERT INTO 表名 VALUES(值1,值2...)

#向student表中插入一行记录

INSERT INTO student VALUES(1,'小明',NULL,'133',NULL,'1992-2-8',true);

INSERT INTO student VALUES(2,'小强','男',NULL,"西安",'1993-2-8',true);

注意:全部插入时,如果某一列没有非空约束,

又不想给值,那么任何类型可以给NULL值,

不能不写手动插入NULL值后,默认值不起作用

2>向指定列下插入数据

语法: INSERT INTO 表名(列名1,列名2...)VALUES(值1,值2...)

#向name和phone两个字段插入值

INSERT INTO student(name,phone)VALUES('weige','135');

#向id,name和birth三个字段插入值

INSERT INTO student(id,name,birth)VALUES(NULL,'dxw',now());

注意:

1>部分插入时非空字段,如果没有给默认值,

插入时必须赋值

2>如果某个字段有默认值,部分插入时,

没有给这一列值,那么就会使用默认值

3>主键列如果设置了自增长,可以不用给值

他会自增长,即使插入NULL,也会自增长

2、UPDATE 修改数据

1>修改列下所有数据(慎用)

语法: UPDATE 表名 SET 列名1=值1,列名2=值2...;

#修改所有人的address为'西安市',birth为当前日期

UPDATE student SET address='西安市',birth=now();

2>根据条件修改列下面的值

语法: UPDATE 表名 SET 列名1=值1,列名2=值2 WHERE 条件列=条件值;

#将id为2的学生address改为'兰州',birth改为'1992-10-1'

UPDATE student SET address='兰州',birth='1992-10-1' WHERE id=2;

#将gender为NULL的学生gender改为'男'

UPDATE student SET gender='男'

WHERE gender IS NULL;

#将isMarried不为NULL的学生值都改为false(0)

UPDATE student SET isMarried = false WHERE isMarried IS NOT NULL;

#将id大于2的学生address修改为'陕西省'

UPDATE student SET address='陕西省' WHERE id>2;

#将除了id为4的学生外,其他人的name改为NULL

UPDATE student SET phone=NULL WHERE id<>4;

注意:

1>根据条件修改任何类型都可以使用=,>,,>=,<=做判断

2>如果值和NULL之间做比较

使用IS NULL和IS NOT NULL

3、DELETE 删除

1>删除表中所有数据(慎用)

语法: DELETE FROM 表名;

#删除student表中所有数据

DELETE FROM student;

2>根据条件来删除

语法: DELETE FROM 表名 WHERE 列名=值;

#删除2019年以前出生的学生

DELETE FROM student WHERE birth

#将phone为NULL的学生信息删除

DELETE FROM student WHERE phone IS NULL;

二、DQL数据查询语言

#打开数据库

USE lanou;

#删除表

DROP TABLE IF EXISTS myemp;

DROP TABLE IF EXISTS dept;

#员工表

CREATE TABLE myemp(

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(20) NOT NULL,

sex CHAR(1) DEFAULT '男',

job VARCHAR(30),

salary DECIMAL(7,2),

hiredate DATE,

deptno INT

);

#部门表

CREATE TABLE dept(

deptno INT PRIMARY KEY,

dname VARCHAR(20),

location VARCHAR(20)

);

1、基本查询

1>查询数据表中所有数据(查询效率低)

语法:SELECT * FROM 表名;

2>查询表中某几列的数据

语法:SELECT 列1,列2......FROM 表名;

#查询员工表中所有员工的name和salary

SELECT name,salary FROM myemp;

3>对查询出来的数据指定列别名

语法:SELECT

列1 [AS] 别名1,

列2 [AS] 别名2

......

FROM 表名;

#查询每个员工的名字和年薪

SELECT name 名字,salary*12 年薪 FROM myemp;

4>去除重复列

如果有相同的数据,只让出现一次

语法:SELECT DISTINCT 列名 FROM 表名;

#查看员工表中有多少种职位job

SELECT DISTINCT job FROM myemp;

注意:

DISTINCT后面一般只会跟一个字段名

如果有多个字段,会根据这多个字段的组合去重

2、限制查询

1>查询比较条件

> < >= <= == != <>

#查询薪水大于5000的员工信息

SELECT *FROM myemp WHERE salary>5000;

#查询部门编号是NULL的员工信息

SELECT * FROM myemp WHERE deptno IS NULL;

2>AND和OR关键字

AND:查询出来的值必须同时满足多个条件,等同于&&

OR:查询出来的值只要满足多个条件之一即可,等同于||

#查询职位是销售,并且薪水大于5000的员工信息

SELECT * FROM myemp WHERE job='销售' AND salary>5000;

SELECT * FROM myemp WHERE job='销售' && salary>5000;

#查询职位是销售,或者薪水大于5000的员工信息

SELECT * FROM myemp WHERE job='销售' OR salary>5000;

SELECT * FROM myemp WHERE job='销售' || salary>5000;

3>IN和NOT IN关键字

值列表范围查询

IN(值1,值2......)表示当前列下面的值只要存在于后面列表范围之内,该行记录就可以被匹配出来,相当于OR

NOT IN(值1,值2......)取出不符合此列表的数据记录,相当于AND

#查询职位是'销售'或者'研发部'的员工信息

SELECT * FROM myemp WHERE job IN('销售','研发部');

#查询不是10号和20号部门的员工信息

SELECT * FROM myemp WHERE deptno NOT IN(10,20);

4>BETWEEN...AND

查询值在某个范围之内的数据,等价于>= && <=

#查询薪水是5000到8000之间的员工信息

SELECT * FROM myemp WHERE salary BETWEEN 5000 AND 8000;

#查询不是2015年到2018年入职的员工信息

SELECT * FROM myemp WHERE hiredate NOT BETWEEN '2015-1-1' AND '2018-12-31';

SELECT * FROM myemp WHERE year(hiredate) NOT BETWEEN 2015 AND 2018;

5>在列上使用函数或者表达式

表达式:

#查询年薪大于100000的员工信息

SELECT id,name,salary,salary*12 year_sal FROM

myemp where salary*12>100000;

#查询给每个员工涨薪1000后的薪水

SELECT id,name,salary,salary+1000 FROM myemp

WHERE salary IS NOT NULL;

函数:

#查看所有2017年以前入职的员工信息

SELECT * FROM myemp WHERE YEAR(hiredate)<2017;

#查看所有6月份入职的员工信息

SELECT * FROM myemp WHERE month(hiredate)=6;

3、模糊查询

当执行查询时,如果只知道一部分的数据,可以借助LIKE关键字进行模糊匹配,LIKE关键字需要借助两个通配符

% 0个到多个任意字符

_ 任意的单个字符

#查询名字中首字母不是'l'的员工信息

SELECT * FROM myemp WHERE name NOT LIKE 'l%';

#查询名字中第二个单词是'o'的员工信息

SELECT * FROM myemp WHERE LIKE '_o%';

#查询所有6月份入职的员工信息

SELECT * FROM myemp WHERE hiredate LIKE ‘%-06-%’;

4、排序查询

对列下面的值按照从小到大或者从大到小的顺序排序

语法:

SELECT 列1,列2......FROM myemp

[WHERE CONDITIONS] ORDER BY 排序列 [ASC]|DESC

ASC:数据按照从小到大的顺序排序,默认排序规则,可以省略不写

DESC:数据按照从大到小的顺序排序

从小到大排序规则:

数字: 1 2 3...

字符: abc...

日期:从前往后

NULL:会被当做最小值

#按照入职日期先后对员工进行排序

SELECT * FROM myemp ORDER BY hiredate;

#将薪资5000以上的员工从高到低排序

SELECT * FROM myemp WHERE salary>5000 ORDER BY salary DESC;

#按照字母表顺序对名字进行排序

SELECT * FROM myemp ORDER BY name;

多列排序

默认先按照第一列的排序规则进行排序,如果第一列相同再按照第二列的排序规则排序,依次类推...

#按照部门编号对员工进行升序排序,如果是同一个部门,按照薪水降序排序

SELECT * FROM myemp ORDER BY deptno ASC,salary DESC;

你可能感兴趣的:(mysql,02)