MYSQL案例

作者: 凤之鸠 | 来源:发表于2017-12-26 11:50 被阅读138次

SQL语句分类:

1.DDL DATA define LANGUAGE 数据定义语句: CREATE    ALTER ;

2.DML DATA manipulation LANGUAGE 数据操作语句  增删改语句  INSERT /  DELETE /UPDATE ;

3.DQL DATA QUERY LANGUAGE  数据查询语句  SELECT ;

一、增删改

1.增加 INSERT

方式1:

语法:INSERT INTO 表名 (字段1,字段2。。。) VALUES(值1,值2。。。);

mysql> INSERT INTO emp (empno,ename,deptno) VALUES(1,'tom',1010);

方式2:插入部分字段的值,字段的个数和顺序要与值的个数和顺序一致

mysql> INSERT INTO emp (empno,ename) VALUES(2,'tom');

方式3:省略字段,但是值的个数和顺序要和表里的一致;

mysql> INSERT INTO emp VALUES (3,'bob',1002);

2.删除 DELETE

方式1:删除表中的所有数据;

语法:DELETE FROM  表名;

mysql> DELETE FROM emp;

方式2:删除符合条件的数据;

语法: DELETE FROM 表名 WHERE 条件;

mysql> DELETE FROM emp WHERE ename ='tom';

操作符:

=等于

<小于

<=小于等于

>大于

>=大于等于

<>不等于  !=

BETWEEN 下限值 AND  上线值

注意:下限值和上线值是包括的。

如:mysql> DELETE FROM emp  WHERE empno BETWEEN 2 AND 4;  包含2和4;

逻辑表达式:

连接我们的条件表达式的

AND  并且  所有的条件都要满足的情况下才会去匹配。

mysql> DELETE FROM emp WHERE empno>=2 AND empno<=4;

OR 或者    满足其中之一的条件都能匹配。

mysql> DELETE FROM emp WHERE empno=1 OR empno =5;

3.更新数据UPDATE

不带条件可以更改整个字段的值:

mysql> UPDATE emp SET deptno =1001;

带条件,更改符合条件的数据:

mysql> UPDATE emp SET deptno =1002 WHERE ename='tom';

更改多个字段的值

mysql> UPDATE emp SET empno=5,deptno=1003 WHERE ename ='tom';

/*二、简单查询DQL (data query language)

1.查询所有列的所有数据;

使用*的效率相对较低,

select * from 表名;

select sid,sname ,birthday from 表名;

2.查询指定列的数据;

select 字段1,字段2.。。。from  表名;

3.去重查询

SELECT DISTINCT sname FROM student;

4.列计算:数值列可以进行加减乘除运算

SELECT sid,sname ,sal+comm  FROM student;

5.字段的别名 ,as可以省略,别名的引号可以省略

SELECT sid AS 编号,sname AS 姓名,birthday AS 生日 FROM student;

6.条件查询

SELECT * FROM student WHERE birthday >'2000-02-01'AND sex='女' OR sid=1 ;

in关键词:

字段的值符合括号里的任何一个就满足条件

SELECT * FROM student WHERE sid IN(1,4,9);

SELECT * FROM student WHERE sname IN('tom','bob') ;

not in: 不是括号里的任何一个就满足条件

is null :值为null;

is not null:值不为null;

7.模糊查询  like

%  代表任意多个字符

_  代表一个字符

select * from student where sname like '张';

select * from student where sname like '___张';

8.排序  order by

asc :ascend 升序,默认为升序;

desc : descend 降序;

select * from student order by sal asc;

按多个字段排序:

语法: select * from 表名 order by 字段1 desc ,字段2  desc;

select * from student order by sex desc ,sal  desc;

9.limit 限制返回的条数  一般用于数据分页

limit m,n;  m代表开始的索引,n代表个数;

SELECT * FROM emp LIMIT 15,5;

limit n;  n代表个数,索引从0开始;

10. null和任何值计算都得null;

函数:ifnull(字段,值); 若该字段中有值为null;

SELECT ename ,sal+IFNULL(comm,0) FROM emp;

函数:concat(字段,值或字段);可以把字段的值拼接起来;

SELECT ename ,CONCAT(sal,'元') sal FROM emp;

*/

1.创建学生表student:学生编号sid 主键自增长,姓名sname 非空,性别sex  非空,生日birthday ,年龄age ,班级编号cid ;

mysql> create table student(sid int primary key auto_increment,sname varchar(10)

not null,sex varchar(10) not null,birthday date,age int,cid int);

Query OK, 0 rows affected (0.03 sec)

这是学生表student:

+----------+-------------+------+-----+---------+----------------+

| Field    | Type        | Null | Key | Default | Extra          |

+----------+-------------+------+-----+---------+----------------+

| sid      | int(11)    | NO  | PRI | NULL    | auto_increment |

| sname    | varchar(10) | NO  |    |        |                |

| sex      | varchar(10) | NO  |    |        |                |

| birthday | date        | YES  |    | NULL    |                |

| age      | int(11)    | YES  |    | NULL    |                |

| cid      | int(11)    | YES  |    | NULL    |                |

+----------+-------------+------+-----+---------+----------------+

2.创建班级表class: 班级编号 cid 主键 ,班级名称cname 非空;

mysql> create table class(cid int primary key,cname varchar(10) not null);

Query OK, 0 rows affected (0.01 sec)

mysql> desc class;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| cid  | int(11)    | NO  | PRI |        |      |

| cname | varchar(10) | NO  |    |        |      |

+-------+-------------+------+-----+---------+-------+

3.给学生表添加一个字段:住址address;

mysql> alter table student add column address varchar(10);

Query OK, 0 rows affected (0.09 sec)

Records: 0  Duplicates: 0  Warnings: 0

这是增加的字段address:

mysql> desc student;

+----------+-------------+------+-----+---------+----------------+

| Field    | Type        | Null | Key | Default | Extra          |

+----------+-------------+------+-----+---------+----------------+

| sid      | int(11)    | NO  | PRI | NULL    | auto_increment |

| sname    | varchar(10) | NO  |    |        |                |

| sex      | varchar(10) | NO  |    |        |                |

| birthday | date        | YES  |    | NULL    |                |

| age      | int(11)    | YES  |    | NULL    |                |

| cid      | int(11)    | YES  |    | NULL    |                |

| address  | varchar(10) | YES  |    | NULL    |                |

+----------+-------------+------+-----+---------+----------------+

7 rows in set (0.01 sec)

4.修改学生表性别字段为gender;

mysql> alter table student change sex gender varchar(10);

Query OK, 0 rows affected (0.02 sec)

Records: 0  Duplicates: 0  Warnings: 0

修改后的student表:

mysql> desc student;

+----------+-------------+------+-----+---------+----------------+

| Field    | Type        | Null | Key | Default | Extra          |

+----------+-------------+------+-----+---------+----------------+

| sid      | int(11)    | NO  | PRI | NULL    | auto_increment |

| sname    | varchar(10) | NO  |    |        |                |

| gender  | varchar(10) | YES  |    | NULL    |                |

| birthday | date        | YES  |    | NULL    |                |

| age      | int(11)    | YES  |    | NULL    |                |

| cid      | int(11)    | YES  |    | NULL    |                |

| address  | varchar(10) | YES  |    | NULL    |                |

+----------+-------------+------+-----+---------+----------------+

7 rows in set (0.01 sec)

5.给birthday添加默认值为2000-01-01;

mysql> alter table student modify birthday date default '2000-01-01';

Query OK, 0 rows affected (0.03 sec)

Records: 0  Duplicates: 0  Warnings: 0

改变birthday的默认值:

mysql> desc student;

+----------+-------------+------+-----+------------+----------------+

| Field    | Type        | Null | Key | Default    | Extra          |

+----------+-------------+------+-----+------------+----------------+

| sid      | int(11)    | NO  | PRI | NULL      | auto_increment |

| sname    | varchar(10) | NO  |    |            |                |

| gender  | varchar(10) | YES  |    | NULL      |                |

| birthday | date        | YES  |    | 2000-01-01 |                |

| age      | int(11)    | YES  |    | NULL      |                |

| cid      | int(11)    | YES  |    | NULL      |                |

| address  | varchar(10) | YES  |    | NULL      |                |

+----------+-------------+------+-----+------------+----------------+

6.给性别字段添加默认值为男;

mysql> set names gbk;

Query OK, 0 rows affected (0.02 sec)

mysql> alter table student modify gender varchar(10) default '男';

Query OK, 0 rows affected (0.04 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;

+----------+-------------+------+-----+------------+----------------+

| Field    | Type        | Null | Key | Default    | Extra          |

+----------+-------------+------+-----+------------+----------------+

| sid      | int(11)    | NO  | PRI | NULL      | auto_increment |

| sname    | varchar(10) | NO  |    |            |                |

| gender  | varchar(10) | YES  |    | 男          |                |

| birthday | date        | YES  |    | 2000-01-01 |                |

| age      | int(11)    | YES  |    | NULL      |                |

| cid      | int(11)    | YES  |    | NULL      |                |

| address  | varchar(10) | YES  |    | NULL      |                |

+----------+-------------+------+-----+------------+----------------+

7.删除age字段;

mysql> alter table student drop age;

Query OK, 0 rows affected (0.01 sec)

mysql> desc student;

+----------+-------------+------+-----+------------+----------------+

| Field    | Type        | Null | Key | Default    | Extra          |

+----------+-------------+------+-----+------------+----------------+

| sid      | int(11)    | NO  | PRI | NULL      | auto_increment |

| sname    | varchar(10) | NO  |    |            |                |

| gender  | varchar(10) | YES  |    | 男          |                |

| birthday | date        | YES  |    | 2000-01-01 |                |

| cid      | int(11)    | YES  |    | NULL      |                |

| address  | varchar(10) | YES  |    | NULL      |                |

+----------+-------------+------+-----+------------+----------------+

9.给班级表插入3个班级;

mysql> insert into class values(1001,'一班');

Query OK, 1 row affected (0.03 sec)

mysql> insert into class values(1002,'二班');

Query OK, 1 row affected (0.00 sec)

mysql> insert into class values(1003,'三班');

Query OK, 1 row affected (0.00 sec)

mysql> select * from class;

+------+-------+

| cid  | cname |

+------+-------+

| 1001 | 一班    |

| 1002 | 二班      |

| 1003 | 三班      |

+------+-------+

10.在学生表中给每个班级添加3名学生信息;

mysql> insert into student values(1,'张三','男','2012-01-02',1001,'cq');

Query OK, 1 row affected (0.00 sec)

mysql> insert into student values(null,'李四','女','2009-03-22',1002,'cq');

Query OK, 1 row affected (0.00 sec)

mysql> insert into student values(null,'王五','男','2009-03-25',1003,'cq');

Query OK, 1 row affected (0.00 sec)

mysql> select *from student;

+-----+-------+--------+------------+------+---------+

| sid | sname | gender | birthday  | cid  | address |

+-----+-------+--------+------------+------+---------+

|  1 | 张三      | 男      | 2012-01-02 | 1001 | cq      |

|  2 | 李四      | 女      | 2009-03-22 | 1002 | cq      |

|  3 | 王五      | 男      | 2009-03-25 | 1003 | cq      |

+-----+-------+--------+------------+------+---------+

8.给学生表的cid上添加外键约束,以参考class表中的cid字段;

mysql> alter table student add constraint fk_cid foreign key(cid) references class(cid);

Query OK, 3 rows affected (0.02 sec)

Records: 3  Duplicates: 0  Warnings: 0

受到约束报错:

mysql>  insert into student values(null,'王五','男','2009-03-25',1004,'cq');

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f

ails (`c17/student`, CONSTRAINT `fk_cid` FOREIGN KEY (`cid`) REFERENCES `class`

(`cid`))

11.删除外键;

mysql> alter table student drop foreign  key fk_cid;

Query OK, 3 rows affected (0.02 sec)

Records: 3  Duplicates: 0  Warnings: 0

删除后可以往student继续添加学生信息:

mysql>  insert into student values(null,'王五','男','2009-03-25',1004,'cq');

Query OK, 1 row affected (0.00 sec)

mysql> select *from student;

+-----+-------+--------+------------+------+---------+

| sid | sname | gender | birthday  | cid  | address |

+-----+-------+--------+------------+------+---------+

|  1 | 张三      | 男      | 2012-01-02 | 1001 | cq      |

|  2 | 李四      | 女      | 2009-03-22 | 1002 | cq      |

|  3 | 王五      | 男      | 2009-03-25 | 1003 | cq      |

|  4 | 王五      | 男      | 2009-03-25 | 1004 | cq      |

+-----+-------+--------+------------+------+---------+

4 rows in set (0.00 sec)

12.复制student表到student2;

mysql> create table student2 select * from student;

Query OK, 4 rows affected (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 0

mysql> select *from student2;

+-----+-------+--------+------------+------+---------+

| sid | sname | gender | birthday  | cid  | address |

+-----+-------+--------+------------+------+---------+

|  1 | 张三      | 男      | 2012-01-02 | 1001 | cq      |

|  2 | 李四      | 女      | 2009-03-22 | 1002 | cq      |

|  3 | 王五      | 男      | 2009-03-25 | 1003 | cq      |

|  4 | 王五      | 男      | 2009-03-25 | 1004 | cq      |

+-----+-------+--------+------------+------+---------+

13.将表student2的名字改为stu;

改前所有的表:

mysql> show tables;

+---------------+

| Tables_in_c17 |

+---------------+

| class        |

| student      |

| student2      |

+---------------+

改后所有的表:

mysql> show tables;

+---------------+

| Tables_in_c17 |

+---------------+

| class        |

| stu          |

| student      |

+---------------+

14.删除stu表中sid的自增长;

mysql> desc stu;

+----------+-------------+------+-----+------------+----------------+

| Field    | Type        | Null | Key | Default    | Extra          |

+----------+-------------+------+-----+------------+----------------+

| sid      | int(11)    | NO  | PRI | NULL      | auto_increment |

| sname    | varchar(10) | NO  |    |            |                |

| gender  | varchar(10) | YES  |    | 男          |                |

| birthday | date        | YES  |    | 2000-01-01 |                |

| cid      | int(11)    | YES  |    | NULL      |                |

| address  | varchar(10) | YES  |    | NULL      |                |

+----------+-------------+------+-----+------------+----------------+

mysql> alter table stu modify sid int;

Query OK, 3 rows affected (0.02 sec)

Records: 3  Duplicates: 0  Warnings: 0

mysql> desc stu;

+----------+-------------+------+-----+------------+-------+

| Field    | Type        | Null | Key | Default    | Extra |

+----------+-------------+------+-----+------------+-------+

| sid      | int(11)    | NO  | PRI | 0          |      |

| sname    | varchar(10) | NO  |    |            |      |

| gender  | varchar(10) | YES  |    | 男          |      |

| birthday | date        | YES  |    | 2000-01-01 |      |

| cid      | int(11)    | YES  |    | NULL      |      |

| address  | varchar(10) | YES  |    | NULL      |      |

+----------+-------------+------+-----+------------+-------+

15.删除stu表;

删除前:

mysql> show tables;

+---------------+

| Tables_in_c17 |

+---------------+

| class        |

| stu          |

| student      |

+---------------+

mysql> drop table stu;

Query OK, 0 rows affected (0.01 sec)

删除后:

mysql> show tables;

+---------------+

| Tables_in_c17 |

+---------------+

| class        |

| student      |

+---------------+

2 rows in set (0.00 sec)

2.emp表

-- 1.查询员工表中 工资大于15000 且在2005年前入职的所有员工信息。

SELECT * FROM emp WHERE sal>15000 AND  hiredate<'2005';

-- 2.查询销售员中工资最高的员工。

SELECT * FROM emp WHERE job='销售员' ORDER BY sal DESC LIMIT 1;

-- 3.查询文员中工资最低的员工信息。

SELECT * FROM emp WHERE job='文员' ORDER BY sal ASC LIMIT 1;

-- 4.查询姓张的员工中工资大于20000的员工信息。

SELECT * FROM emp WHERE ename LIKE '张%' AND sal>20000;

-- 5.查询工资最高的前3名员工信息。

SELECT * FROM emp ORDER BY sal DESC LIMIT 3;

-- 6.查询总工资最高的员工信息。

SELECT *,sal+IFNULL(comm,0) ss FROM emp ORDER BY ss DESC LIMIT 1;

-- 7.查询有津贴且在2001-02-01前入职的员工信息。

SELECT * FROM emp WHERE comm IS NOT NULL AND hiredate >'2001-02-01';

-- 8.查询员工的姓名、部门、总工资。

SELECT ename ,deptno,sal+IFNULL(comm,0) ss FROM emp;

-- 9.查询名字为三个字的工资最高的前2名员工信息。

SELECT * FROM emp WHERE ename LIKE '___' ORDER BY sal  DESC LIMIT 2;

-- 10.查询职位为文员或销售员中工资最高的员工信息,工资要带¥符号。

SELECT empno ,ename ,job,CONCAT('¥',sal) 工资 FROM emp

WHERE job ='文员' OR job='销售员' ORDER BY sal DESC LIMIT 1;

--

ctrl + shift +c 加注释

ctrl + shift +r 去掉注释

3.-- emp表

SELECT*FROM emp;

-- 1.查询经理中入职时间最早的员工信息。

SELECT*FROM emp WHERE job='经理'ORDER BY hiredate ASC LIMIT 1;

-- 2.查询入职时间在2002-2004年的 且有津贴补助的员工信息。

SELECT*FROM emp WHERE comm IS NOT NULL AND hiredate >='2002'AND hiredate <='2004';

-- 3.查询30部门中名字带木的员工信息。

SELECT*FROM emp WHERE ename LIKE '%木%'AND deptno=30;

-- 4.查询名字为2个字,工资最高的2名员工信息。

SELECT*FROM emp WHERE ename LIKE '__' ORDER BY sal DESC LIMIT 2;

-- 5.查询工资小于10000或工资大于30000的员工的信息。

SELECT*FROM emp WHERE sal<10000 OR sal>30000;

-- 6.查询没有津贴的员工中,工资最低的2名员工的信息。

SELECT*FROM emp WHERE comm IS NULL ORDER BY sal ASC LIMIT 2;

-- 7.查询文员中入职最早的员工信息。

SELECT*FROM emp WHERE job='文员' ORDER BY hiredate ASC LIMIT 1;

-- 8.查询销售员中入职最晚的员工信息。

SELECT*FROM emp WHERE job='销售员' ORDER BY hiredate DESC LIMIT 1;

-- 9.查询名字为3个字,没有津贴,工资最低的员工信息。

SELECT*FROM emp WHERE ename LIKE '___' AND comm IS NULL ORDER BY sal ASC LIMIT 1;

-- 10.查询10号或20号部门中工资最低的员工的姓名、职位、部门、工资。

SELECT ename,job,deptno,sal FROM emp WHERE deptno=10 OR deptno=20 ORDER BY sal ASC LIMIT 1;

-- update emp表

-- 11.把名字为3个字的员工的津贴都改为100元。

UPDATE emp SET comm=100 WHERE ename LIKE '___';

-- 12.把文员的工资都涨100元。

UPDATE emp SET sal=sal+100 WHERE job='文员';

-- 13.把销售员中入职最早的员工的津贴增加200元。

UPDATE emp SET comm=comm+200 WHERE job='销售员' ORDER BY hiredate ASC LIMIT 1;

-- 14.把所有员工中入职最早的员工的工资增加200元。

UPDATE emp SET sal=sal+200  ORDER BY hiredate ASC LIMIT 1;

-- 15.把2002-2006年间入职的员工的津贴降低50元。

UPDATE emp SET comm=comm-50 WHERE hiredate BETWEEN '2002' AND '2006';

-- 16.把30号部门的所有员工的工资改为8000元,津贴改为500元。

UPDATE emp SET sal=8000,comm=500 WHERE deptno=30;

-- emp表

-- 17.删除工资最高的员工的信息。

ALTER TABLE emp DROP FOREIGN KEY fk_emp;

DELETE FROM emp ORDER BY sal DESC LIMIT 1;

-- 18.删除工资最低的员工的信息。

DELETE FROM emp ORDER BY sal ASC LIMIT 1;

-- 19.删除 没有津贴,名字为2个字的员工信息。

DELETE FROM emp  WHERE  comm IS NULL AND ename LIKE '__';

-- 20.删除30号部门中入职时间早的员工信息。

DELETE FROM emp WHERE deptno=30 ORDER BY hiredate ASC LIMIT 1;

-- 21.删除所有员工中名字带张的员工的信息。

DELETE FROM emp WHERE ename LIKE '%张%';

SELECT*FROM emp;

/*创建部门表*/

CREATE TABLE dept(

deptno INT PRIMARY KEY,

dname VARCHAR(50),

loc VARCHAR(50)

);

/*创建雇员表*/

CREATE TABLE emp(

empno INT PRIMARY KEY,

ename VARCHAR(50),

job VARCHAR(50),

mgr INT,

hiredate DATE,

sal DECIMAL(7,2),

comm DECIMAL(7,2),

deptno INT,

CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno)

);

/*创建工资等级表*/

CREATE TABLE salgrade(

grade INT PRIMARY KEY,

losal INT,

hisal INT

);

/*插入dept表数据*/

INSERT INTO dept VALUES (10, '教研部', '重庆');

INSERT INTO dept VALUES (20, '学工部', '成都');

INSERT INTO dept VALUES (30, '销售部', '北京');

INSERT INTO dept VALUES (40, '财务部', '天津');

/*插入emp表数据*/

INSERT INTO emp VALUES (1009, '习近平', '董事长', NULL, '2001-11-17', 50000, NULL, 10);

INSERT INTO emp VALUES (1004, '范冰冰', '经理', 1009, '2001-04-02', 29750, NULL, 20);

INSERT INTO emp VALUES (1006, '李冰冰', '经理', 1009, '2001-05-01', 28500, NULL, 30);

INSERT INTO emp VALUES (1007, '高圆圆', '经理', 1009, '2001-09-01', 24500, NULL, 10);

INSERT INTO emp VALUES (1008, '周星驰', '分析师', 1004, '2007-04-19', 30000, NULL, 20);

INSERT INTO emp VALUES (1013, '周星星', '分析师', 1004, '2001-12-03', 30000, NULL, 20);

INSERT INTO emp VALUES (1002, '周六福 ', '销售员', 1006, '2001-02-20', 16000, 3000, 30);

INSERT INTO emp VALUES (1003, '康熙', '销售员', 1006, '2001-02-22', 12500, 5000, 30);

INSERT INTO emp VALUES (1005, '李世民 ', '销售员', 1006, '2001-09-28', 12500, 4000, 30);

INSERT INTO emp VALUES (1010, '孙悟空', '销售员', 1006, '2001-09-08', 15000, 0, 30);

INSERT INTO emp VALUES (1012, '唐僧', '文员', 1006, '2001-12-03', 9500, NULL, 30);

INSERT INTO emp VALUES (1014, '令狐冲', '文员', 1007, '2002-01-23', 13000, NULL, 10);

INSERT INTO emp VALUES (1011, '刘欢', '文员', 1008, '2007-05-23', 11000, NULL, 20);

INSERT INTO emp VALUES (1016, '小沈阳', '文员', 1007, '2008-05-23', 14000, NULL, 20);

INSERT INTO emp VALUES (1015, '张浩', '销售员', 1006, '2001-08-08', 17000, 0, 30);

INSERT INTO emp VALUES (1001, '朱元璋', '文员', 1013, '2000-12-17', 8000, NULL, 20);

/*插入salgrade表数据*/

INSERT INTO salgrade VALUES (1, 7000, 12000);

INSERT INTO salgrade VALUES (2, 12010, 14000);

INSERT INTO salgrade VALUES (3, 14010, 20000);

INSERT INTO salgrade VALUES (4, 20010, 30000);

INSERT INTO salgrade VALUES (5, 30010, 99990);

SELECT*FROM emp;

相关文章

网友评论

    本文标题:MYSQL案例

    本文链接:https://www.haomeiwen.com/subject/wsmdgxtx.html