基本语句操作

创建数据库:

create database database-name
  • 1

删除数据库:

drop database database-name
  • 1

修改数据名:

RENAME DATABASE db_name TO new_db_name
  • 1

创建新表:

create table table-name(
col1-name type1 [not null] [primary key] [auto_increment],
col2-name type2 ,
……
)
  • 1
  • 2
  • 3
  • 4
  • 5

auto_increment ->自动增长,只针对数值类型

根据旧表创建新表:

create table table_name like table_old_name
  • 1
create table table_name as select col1,col2... from table_old_name;
  • 1

删除表:

drop table table_name;
  • 1

修改表名:

alter table table_name rename table_new_name;
  • 1

增加一个列:

alter table table_name add column col type [not null] ...;
  • 1

删除一个列:

alter table table_name drop column col_name;
  • 1

修改列名:

alter table table_name change column col_old_name col_new_name type [not null]...; 
  • 1

修改列的属性:

alter table table_name change column col_old_name col_old_name type [not null]...; 
  • 1

选择:

select * from table_name where ...
  • 1

插入:

insert into table_name(col1_name,col2_name...) values(...);
  • 1

拷贝表所有数据:

insert into table1_name(table1_name.col1_name,table1_name.col2_name...) select table2_name.col1_name,
table2_name.col_name...
from table2_name
  • 1
  • 2
  • 3

跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
  • 1

删除:

delect from table_name where
  • 1

更新:

update table_name set col1_nameee=value ...where ...
  • 1

查找:

select * from table_name where ...
  • 1

排序:

select * from table_name order by col1_name asc/desc;
  • 1

asc 升序 
desc 降序

总数:

select count(*|col_name) as count_name from table_name where ...
  • 1

求和:

select sum(col_name) as sum_name from table_name where ...
  • 1

求均值:

select avg(col_name) as avg_name from table_name where ...
  • 1

最大:

select max(col_name) as max_name from table_name where ...
  • 1

最小:

select min(col_name) as min_name from table_name where ...
  • 1

union和union all 
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。 
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。 
同时,每条 SELECT 语句中的列的顺序必须相同.

**注释:另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。 
注意:1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名 
2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同 
** 
union的用法及注意事项 
union:联合的意思,即把两次或多次查询结果合并起来。 
要求:两次查询的列数必须一致 
推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样 
可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。 
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。 
如果不想去掉重复的行,可以使用union all。 
如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2
  • 1
  • 2
  • 3

Join语法概述 
JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。

select * from table1_name inner join table2_name on teable1_name.col = teable2_name.col where ...
  • 1

select * from table1_name inner join table2_name on teable1_name.col = teable2_name.col where table1_name.col is null or table2_name.col is null and...
  • 1

 
LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。

select * from table1_name left join table2_name on teable1_name.col = teable2_name.col where ...
  • 1

select * from table1_name inner join table2_name on teable1_name.col = teable2_name.col where teable2_name.col is null and ...
  • 1

 
RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。

Full join:

select * from A left join B on B.name = A.name
union
select * from A right join B on B.name = A.name;
  • 1
  • 2
  • 3

分组:

select *|count,avg,sum,max,min from table_name group by table_name.col_name
  • 1

子查询:

#in
select * from table1_name where tabel1_name.col1 in (
select table2_name.col1 from teable2_name where...
)
#not in
select * from table1_name where tabel1_name.col1 not in (
select table2_name.col1 from teable2_name where...
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

between 数值1 and 数值2

select * from table_name where table_name.col between 数值1 and 数值2
  • 1

not between 数值1 and 数值2

select * from table_name where table_name.col between 数值1 and 数值2
  • 1

两张关联表,删除主表中已经在副表中没有的信息:

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
  • 1

limit 返回前几条或者中间某几行数据

SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset
  • 1

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。 
例:

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
  • 1
  • 2
  • 3
  • 4

去重: 
有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录。

select distinct col_name from table_name;
  • 1

实题训练

题目在线测试地址:https://www.nowcoder.com/ta/sql

第一题:

查找最晚入职员工的所有信息
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

输入描述:

输出描述:

emp_no birth_date first_name last_name gender hire_date
10008 1958-02-19 Saniya Kalloufi M 1994-09-15
题解:
select * from employees order by hire_date desc limit 0,1;
  • 1
  • 2

第二题:

查找入职员工时间排名倒数第三的员工所有信息
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

输入描述:

输出描述:

emp_no birth_date first_name last_name gender hire_date
10005 1955-01-21 Kyoichi Maliniak M 1989-09-12
select * from employees order by hire_date desc limit 2,1;
  • 1

第三题:

查找各个部门当前(to_date=’9999-01-01’)领导当前薪水详情以及其对应部门编号dept_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

emp_no salary from_date to_date dept_no
10002 72527 2001-08-02 9999-01-01 d001
10004 74057 2001-11-27 9999-01-01 d004
10005 94692 2001-09-09 9999-01-01 d003
10006 43311 2001-08-02 9999-01-01 d002
10010 94409 2001-11-23 9999-01-01 d006
select salaries.*,dept_manager.dept_no from salaries, dept_manager
where salaries.emp_no = dept_manager.emp_no
and salaries.to_date = "9999-01-01"
and dept_manager.to_date = "9999-01-01";
  • 1
  • 2
  • 3
  • 4

第四题:

查找所有已经分配部门的员工的last_name和first_name
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

输入描述:

输出描述:

last_name first_name dept_no
Facello Georgi d001
省略 省略 省略
Piveteau Duangkaew d006
select last_name,first_name,dept_emp.dept_no from employees,dept_emp where employees.emp_no=dept_emp.emp_no;
  • 1

第五题:

查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

输入描述:

输出描述:

last_name first_name dept_no
Facello Georgi d001
省略 省略 省略
Sluis Mary NULL(在sqlite中此处为空,MySQL为NULL)
select employees.last_name,employees.first_name,dept_emp.dept_no from employees left join dept_emp
on employees.emp_no=dept_emp.emp_no;
  • 1
  • 2

第六题:

查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

emp_no salary
10011 25828
省略 省略
10001 60117
select employees.emp_no,salaries.salary from employees
inner join salaries on employees.emp_no = salaries.emp_no where employees.hire_date = salaries.from_date order by employees.emp_no desc;
  • 1
  • 2

第七题:

查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

emp_no t
10001 17
10004 16
10009 18
select salaries.emp_no,count(salaries.salary) as t from salaries group by salaries.emp_no
having count(salaries.salary)> 15;
  • 1
  • 2

第八题:

找出所有员工当前(to_date=’9999-01-01’)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

salary
94692
94409
88958
88070
74057
72527
59755
43311
25828
select  salaries.salary from salaries where  to_date='9999-01-01' group by salary order by salary desc;
  • 1

第九题:

获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date=’9999-01-01’
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

dept_no emp_no salary
d001 10002 72527
d004 10004 74057
d003 10005 94692
d002 10006 43311
d006 10010 94409
select dm.dept_no,dm.emp_no,s.salary
from salaries s, dept_manager dm
where s.emp_no=dm.emp_no and dm.to_date='9999-01-01' and s.to_date='9999-01-01'
  • 1
  • 2
  • 3

第十题:

获取所有非manager的员工emp_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

输入描述:

输出描述:

emp_no
10001
10003
10007
10008
10009
10011
select emp_no from employees where employees.emp_no not in (
select emp_no from dept_manager
);
  • 1
  • 2
  • 3

第十一题:

获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date=’9999-01-01’。
结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_no。
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

输入描述:

输出描述:

emp_no manager_no
10001 10002
10003 10004
10009 10010
select dept_emp.emp_no,dept_manager.emp_no as manager_no from dept_emp left join dept_manager
on dept_emp.dept_no = dept_manager.dept_no where dept_emp.emp_no!=dept_manager.emp_no
and dept_emp.to_date='9999-01-01' and dept_manager.to_date='9999-01-01';
  • 1
  • 2
  • 3

第十二题:

获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

dept_no emp_no salary
d001 10001 88958
d002 10006 43311
d003 10005 94692
d004 10004 74057
d005 10007 88070
d006 10009 95409
select dept_emp.dept_no,dept_emp.emp_no,max(salaries.salary) as salary
from dept_emp,salaries where dept_emp.emp_no=salaries.emp_no and dept_emp.to_date='9999-01-01'
and salaries.to_date='9999-01-01' group by dept_emp.dept_no;

mysql常用语句及实题训练的更多相关文章

  1. MySQL 常用语句 (汇集)

    原文地址:MySql常用语句作者:wuyanle 一.mysql常用语句 创建,删除和最基本查询: 显示数据库  mysql->show databases; 创建数据库  mysql-> ...

  2. MySQL 常用语句大全

    MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...

  3. mysql常用语句及关键字

    一.常用sql语句 1.创建数据库userCREATE  DATABASE user; 2.删除数据库userDROP DATABASE user; 3.使用数据库userUSE user;显示数据库 ...

  4. 0927—MySQL常用语句集合

    一.连接MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysql bin,再键入命令mysql ...

  5. oracle 和 mysql 常用语句对比汇总

    文章目录 一.数据库管理 1.1 用户管理 1.1.1 mysql用户.权限管理 1.1.2 oracle 用户.角色.权限管理 二.DQL 语句 2.1 基础查询 1.常量查询的区别: 2.字符串拼 ...

  6. mysql常用语句总结

    1.创建语句 CREATE DATABASE database_name //创建数据库 //删表 DROP TABLE IF EXISTS `t_social_user_extend`; //建表C ...

  7. MySQL常用语句大全

    数据库操作:创建数据库create database database_name 查看数据库 show databases使用数据库use dbname删除数据库 drop database dbna ...

  8. [基础学习]MySQL常用语句命令总结

    前言 相信平时大家在开发时都会使用MySQL数据库,它是目前比较火的一款数据库工具,对于大多数企业的业务来说,MySQL可以很完美地支持了. 很多时候我们都是借助mysql可视化工具操作mysql,虽 ...

  9. MYSQL 常用语句与函数命令

    进图数据库mysql –u root –p 输入密码后进入 查看数据库: show databases; 进入数据库:use dvwa; 查看该数据库的表:show tables; 查操作: sele ...

随机推荐

  1. 洛谷$P$2048 超级钢琴 $[NOI2010]$ $rmq$/主席树

    正解:$rmq$/主席树 解题报告: 传送门! 好像看过这题挺多次辣,,,$QwQ$ 之前$NOIp$的时候$cjk$学长讲课讲了这题(虽然那时候的$gql$太菜辣并麻油落实这道_(:з」∠)_,然后 ...

  2. 一文详解滑动平均法、滑动平均模型法(Moving average,MA)

    任何关于算法.编程.AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI.算法.编程和大数据知识分享,以及免费的SSR节点和 ...

  3. 1053 住房空置率 (20 分)C语言

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为"可能空置&quo ...

  4. 用实例理解设计模式——代理模式(Python版)

    代理模式:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式分为: 静态代理 动态代 ...

  5. 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  6. 8款极具表现力的jQuery/CSS3网页菜单

    上一篇我向大家分享了7款效果震憾的HTML5应用组件,今天主要来分享一下CSS3网页菜单,因为在一个网站中,菜单起着举足轻重的作用,所以作为WEB开发人员,我们有必要将网站的菜单设计得尽量完美,下面向 ...

  7. 【5min+】 秋名山的竞速。 ValueTask 和 Task

    系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...

  8. 关于将vs项目推到GitHub上遇到的问题

    想整理下项目,然后通过vs推到github下. 1.在vs上创建好了一个程序.点中解决方案-->右键-->将项目加入代码库. 2.在github上创建好一个仓库,然后复制下https 3. ...

  9. idea 2019.3 最新版破解教程

    背景 最近,idea又被整治了,所以一大批激活码都失效了.我之前已经有2018版的永久激活了,所以非常淡定~,也没打算升级版本.但是,最近发现周围的人都在讨论这个问题.于是,我也找到了2019.3最新 ...

  10. 图解kubernetes调度器抢占流程与算法设计

    抢占调度是分布式调度中一种常见的设计,其核心目标是当不能为高优先级的任务分配资源的时候,会通过抢占低优先级的任务来进行高优先级的调度,本文主要学习k8s的抢占调度以及里面的一些有趣的算法 1. 抢占调 ...