基于MySql数据库的基本sql语句

sql语句(基于MySql案例大全)

 

数据库相关

 

  1. 创建数据库

create database test;

  1. 查看数据库

show databases;

  1. 修改数据库

// 修改字符集 alter database test character set utf8;

  1. 删除数据库

drop database test;

  1. 选择数据库

use test;

// 查询当前使用的数据库

select database();  

表相关

字段的约束

主键约束(值必须唯一而且不空):primary key auto_increment

唯一约束(值必须唯一相互之间不产生冲突):unique

非空约束(值不能为空):not null

创建表

普通建表

create table user(

id int primary key auto_increment,

name varchar(20) unique,

gender bit not null,

birthday date   

);

带有约束的建表

Create table us(

    Id int ,

Uid int,

Constraint key_name primary key (id),

Constraint f_k foreign key(Uid) references user(id)

);

根据子查询建表

Create user1

As select * from user;

查看表

查看所有表:show tables;

查看表结构:desc user;

查看数据库建表语句:show create table user;

修改表

增加列:

alter table user add (

nickname varchar(20),

Hobby varchar(20)

);

修改列的属性:

Alter table user

 modify nickname varchar(50);

修改列名:

Alter table user

change nickname nickna varchar(50);

修改表名:

rename table user to myuser;

修改字符集:

Alter table user character set utf8;

删除一列:

Alter table user drop image;

修改列的顺序:

Alter table user modify nickname varchar(20) after gender;

在nickname上设置唯一约束

Alter table user add constraint ni_ck unique(nickname);

删除约束:

Alter table user drop constraint ni_ck;// 有问题

 

删除表中数据

删除表

Drop table user;

删除表数据

delete 可以精准删除,一条一条的删除。

truncate 将表摧毁,然后重建表,效率高。

约束

非空约束

非空约束不能够指定名字

添加非空约束

Alter table user

Modify img blob not null;

 

删除非空约束

Alter table user

Modify img blob null;

 

同时可以使用default来指定默认值

Alter table user

Modify name varchar default asd;

 

唯一约束

删除约束

Alter table user

Drop index u_k;

 

 

主键

Create table us(

    id int ,

Uid int,

Constraint p_k primary key(id)

);

Mysql中的主键名是PRIMARY所以我们修改或者添加一个带有一个名字的主键是无效的。

Constraint union Primary key (id,uid)//联合主键

删除主键

Alter table user

Drop primary key;

 

外键约束

Alter table us

Add constraint f_k foreign key(uid) references user(id);

Create table us(

    id int ,

Uid int,

Constraint f_k foreign key(Uid) references user(id)

);

Alter table us

Drop foreign key f_k;

 

级联删除

在外键约束后面添加

On delete cascade 从表记录级联删除

On delete set null 从表外键设置成null

 

CRUD

insert into user (id,gender,nickname,birthday,name) values (null,1,'主流7','2018-08-19','hyl');

Update user set name = '主流7' , birthday = '2019-05-05' where id = 2;

Update user set

Delete from user where id = ' 5' ;

唯一查询

Select distinct nickname from user;

查询结果在原来的结果上加10

Select salary + 10 from user;

将前两种结合起来

Select distinct salary + 10 from user;

 

新建一个表

Create table stu(

Id int,

Name varchar(20),

Chinese int,

Math int ,

English int,

Constraint p_k primary key (id)

);

 

Insert into stu values (null,'zhuliu7',45,12,32);

Insert into stu values (null,'tom',75,52,42);

Insert into stu values (null,'jack',95,82,52);

Insert into stu values (null,'rose',45,82,62);

 

查询姓名对应的总分

Select name ,chinese + math + english as summary from stu;

所有的项都使用别名

Select name as 姓名, math + chinese + english as 总分 from stu;

 

条件查询

查询总分大于180的人

Select name from stu where math + chinese + english > 180;

查询英语成绩在70到90之间的人

Select name from stu where english between 60 and 90;

查询英语为特定值的同学

Select name from stu where english in (32,42,62);

查询以j开头的同学

Select * from stu where name like 'j%';

Select * from stu where name like 'j_';

Select * from stu where name like 'j__'; // 由两个字构成的名字

 

排序查询

使用英语成绩排序

Select * from stu order by english desc;

使用总分进行排名

Select name ,chinese + math + english as sum from stu order by (chinese + math + english) desc;

成绩为null的情况会出现求和失败如下图所示

所以需要进行判空的处理

Select name, ifnull(english,0) + ifnull(chinese,0) + ifnull(math,0) as sum from stu where name = 'eminem';

正常显示,如果为空的话那么就将值置为0。

聚合函数

统计大于70分的人数

Select count(*)  from stu where chinese > 70;

统计所有人的总成绩

Select sum(ifnull(chinese,0) + ifnull(math,0) + ifnull(english,0)) from stu;

注意:Sum函数后面不能有空格。

Select count(*) from stu where (ifnull(chinese,0) + ifnull(math,0) + ifnull(english,0)) > 230;

求一个班级数学的平均分

Select avg(math) from stu;

求一个班级的总平均分

Select avg(ifnull(chinese,0) + ifnull(math,0) + ifnull(english,0)) from stu;

求一个班级的最高分和最低分

Select max(chinese) from stu;

最低分为min()

分组查询

创建表

Create table product(

Id int auto_increment,

Pro varchar(50),

Name varchar(50),

Price int,

Constraint p_k primary key(id)

);

Insert into product values(null,'iphone','电器',20);

Insert into product values(null,'小灵通','电器',200);

Insert into product values(null,'杯子','日用',2000);

Insert into product values(null,'充电宝','电器',30);

Insert into product values(null,'数学之美','书籍',40);

Insert into product values(null,'机器学习','书籍',50);

 

查询各种商品的总价

Select pro,sum(price) from product group by pro;

查询购买了每类总价大于100的商品

Select pro ,sum(price) from product group by pro having sum(price) > 100;

查询总价大于100但是小于300的商品

Select pro, sum(price) from product group by pro having sum(price)> 100 and sum(price) < 300;

Having 是Group by之后的选择,比如说上述的sql语句是对分组之后的sum的选择。但是group对于前面的查询语句来说是没有什么限制条件的。

Select pro from product group by pro having sum(price)> 100 and sum(price) < 300;

 

Where与having的区别

**where 和 having都可以用来进行过滤,但是应用场景不同。where语句用来在分组之前进行过滤,having语句用来在分组之后进行过滤。

并且where语句中不允许使用聚合函数的。having语句中可以使用聚合函数。

使用where语句的地方一般都可以使用having替代,但是使用having的地方一般不能用where替代。

备份恢复数据库

备份数据库:

在cmd窗口中:mysqldump -u root -p db_name > c:/xxx.sql

 

恢复数据库:

方法1:在cmd窗口:mysql -u root -p db_name < c:/xxx.sql (这个命令是跑不通的目前)

方法2:在mysql中,通过source命令执行一个sql文件,恢复数据。

 

多表查询

create table dept(

id int primary key auto_increment,

name varchar(20)

);

insert into dept values (null,'财务部');

insert into dept values (null,'人事部');

insert into dept values (null,'销售部');

insert into dept values (null,'科技部');

 

create table emp(

id int primary key auto_increment,

name varchar(20),

dept_id int

);

insert into emp values (null,'奥巴马',1);

insert into emp values (null,'哈里波特',2);

insert into emp values (null,'葫芦娃',3);

insert into emp values (null,'萨达姆',3);

insert into emp values (null,'朴乾',5);

笛卡尔积查询

Select * from dept,emp;

内连接查询(左边和右边都有的记录),类似于于一个等值连接不会去除等值列

Select * from dept,emp where dept.id = emp.dept_id;

Select * from dept inner join emp on dept.id = emp.dept_id;

左外链接

在内连接的基础上加上左边表特有的记录,对应在这个实例里就是查找所有的部门以及对应的员工,其中部门一定是全查但是对应的没有部门的员工则没有查到

Select * from dept left join emp on dept.id = emp.dept_id;

右外连接(在内连接的基础上加上右边表特有的记录)

Select * from dept right join emp on dept.id = emp.dept_id;

全连接就是求两张表的并集

由于Mysql中不支持全外链接所以只能是求两张表的并集

Select * from dept left join emp on dept.id = emp.dept_id

Union

Select * from dept right join emp on dept.id = emp.dept_id;

所有不合群的值都放在了最下面

存储引擎

Show table status like 'user';

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elong_Hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值