MySQL基础语句快速入门

导图

在这里插入图片描述
本文介绍了mysqll数据库的基础语句,在命令行窗口进行演示。语句中[ ]里的内容表示可选项。

MySQL的SQL语句分类

  • SQL:结构化查询语言
  • DDL:数据定义语言:定义数据库、数据表的结构:create drop alter
  • DML:数据操纵语言:主要是用来操作数据:insert update delete
  • DCL:数据控制语言:定义访问权限,取消访问权限,安全设置:grant
  • DQL:数据查询语言:select(查询),from子句,where子句

对数据库的CRUD操作

  • 首先要登录数据库服务器:mysql -uroot -proot

在这里插入图片描述

创建数据库

常规创建

    create database 数据库名字;

如:create database test1;
在这里插入图片描述
注意分号不能漏掉。

创建数据库时指定字符集

 create database 数据库名字 character set 字符集;

例: create database test2 character set utf8;
在这里插入图片描述

创建数据库时指定校对规则

create database 数据库名字 character set 字符集 collate 校对规则;

例: create database test3 character set utf8 collate utf8_bin;
在这里插入图片描述

查看数据库

查看所有数据库

show databases;

在这里插入图片描述
其中的information_schema、performance_schema、mysql是默认库。

查看数据库定义的语句

show create database 数据库名;

例:show create database test3;
在这里插入图片描述

查看当前正在使用的数据库

select database();

在这里插入图片描述

修改数据库

修改数据库的字符集

alter database 数据库名字 character set 字符集;

例:alter database test3 character set gbk;
在这里插入图片描述

删除数据库

drop database 数据库名;

例:drop database test3;
在这里插入图片描述

其他数据库操作命令

切换(选中)数据库

use 数据库名:

例:use test2;

查看当前正在使用的数据库

select database();

在这里插入图片描述

对表的CRUD操作

创建表

create table 表名(
	列名1 列的类型(长度) 约束,
	列名2 列的类型(长度) 约束
);

列的类型

int
char:固定长度
varchar:可变长度
double
float
boolean
date: YY-MM-DD
time: hh:mm:ss
datetime: YY-MM-DD hh:mm:ss 默认值是null
timestamp: YY-MM-DD hh:mm:ss 默认值使用当前时间
text:主要用来存放文本
blob:存放二进制

列的约束

主键约束:primary key
唯一约束:unique
非空约束:not null

例:
创建一个表,先分析实体:学生
1.学生ID
2.姓名
3.性别
4.年龄

create table student(
	sid int primary key,
	sname varchar(31),
	sex int,
	age int
);

在这里插入图片描述

查看表

查看所有的表

show tables;

在这里插入图片描述

查看表的创建语句

show create table 表名;

例:查看刚才创建的学生表
show create table student;
在这里插入图片描述

查看表结构

desc 表名;

例:desc student;
在这里插入图片描述

修改表

添加列(add)

alter table 表名 add 列名 列的类型 列的约束;

例:alter table student add chengji int not null;
在这里插入图片描述
再次查看表结构,能看到已经成功添加了新列:
在这里插入图片描述

修改列(modify)

alter table 表名 modify 列名 列的类型 列的约束;

例:alter table student modify sex varchar(2);
在这里插入图片描述

修改列名(change)

alter table 表名 change 原列名 新列名 列的类型;

例:alter table student change sex gender varchar(2);
在这里插入图片描述
当然,通过change语句可以同时修改表名和表的类型。

删除列

alter table 表名 drop 列名;

在这里插入图片描述

修改表名

rename table 原表名 to 新表名;

例:rename table student to xuesheng;
在这里插入图片描述

修改表的字符集

alter table 表名 character set 字符集;

例:alter table xuesheng character set gbk;
在这里插入图片描述

删除表

drop table 表名;

例:drop table xuesheng;
在这里插入图片描述

对表中数据的CRUD操作

插入数据

完整写法

insert into 表名(列名1,列名2,列名3) values (1,值2,值3)

例:insert into student(sid,sname,sex,age) values (1,“zhangsan”,1,23);
在这里插入图片描述

简单写法(省略列名)

前提是插入的数据必须是完整的(每个属性都必须赋值)
如果插入的是部分列,那么列名不能省略

insert into 表名 values (1,值2,值3)

例1:insert into student values (2,“lisi”,1,23);
在这里插入图片描述
例2(省略列名且插入的不是完全列):insert into student values (3,“lisi”,1);
在这里插入图片描述

批量插入

insert into 表名 values (1,值2,值3),(1,值2,值3),(1,值2,值3),(1,值2,值3)

例:insert into student(sid,sname,sex,age) values (4,“zhangsan”,1,23),
(5,“zhangsan”,1,23),(6,“zhangsan”,1,23),(7,“zhangsan”,1,23),(8,“zhangsan”,1,23);
在这里插入图片描述

命令行下插入中文问题

  • 临时解决方案
    set names gbk;
    相当于告诉mysql服务器软件,我们当前在命令行输入的内容是GBK编码,当命令窗口关闭后,它再输入中文就会有问题
  • 永久解决方案
    修改my.ini配置(在mysql软件安装路径里)
    在这里插入图片描述
    将编码改成GBK在这里插入图片描述

删除记录

delete from 表名 [where 条件];

例:delete from student where sid=9;
在这里插入图片描述
注:若不写where条件,将会把表中记录全部删除

delete删除数据与truncate删除数据的区别

delete: DML 一条一条删除数据
truncate: DDL 先删除表再重建表
效率比较:若数据少,delete比较高效;若数据多,truncate比较高效

更新表记录

update 表名 set 列名=列值,列名2=列值2 [where 条件];
  • 如果参数是字符串或日期,要加上单引号
  • 如果不加where条件,那么整张表的记录都会被修改

例:将sid为5的记录的名字改成李四
update student set sname=‘李四’ where sid=5;

在这里插入图片描述

查询记录

select:选择显示哪些列的内容
distinct: 去除重复的数据

select [distinct] [*] [列名1,列名2] from 表名 [where 条件];

要测试查询语句,先建立一个案例表,并向其中插入测试数据
表1:商品分类
1.分类ID
2.分类名称
3.分类描述

create table category(
	cid int primary key auto_increment,
	cname varchar(10),
	cdesc varchar(31)
);
insert into category values (null,'手机数码','电子产品,猪猪生产');
insert into category values (null,'鞋靴箱包','江南皮革厂生产');
insert into category values (null,'香烟酒水','茅台二锅头');
insert into category values (null,'酸奶饼干','蒙牛生产');
insert into category values (null,'馋嘴零食','花生瓜子八宝粥+辣条');

在这里插入图片描述

简单查询

查询所有列的信息:

select * from category;

查询指定列:

要查询指定的列,那么加*换成需要查询的列名:

select cname,cdesc from category;

在这里插入图片描述

表2:商品
1.商品ID
2.商品名称
3.商品的价格
4.生产日期
5.商品分类ID

商品和商品分类:所属关系

create table product(
	pid int primary key auto_increment,
	pname varchar(10),
	price double,
	pdate timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	pno int
);
insert into product (pid,pname,price,pno)values(null,'华为p30',4999,1);
insert into product (pid,pname,price,pno)values(null,'红米note4',1999,1);
insert into product (pid,pname,price,pno)values(null,'耐克',499,2);
insert into product (pid,pname,price,pno)values(null,'老村长',88,3);
insert into product (pid,pname,price,pno)values(null,'劲酒',35,3);
insert into product (pid,pname,price,pno)values(null,'小熊饼干',4,4);
insert into product (pid,pname,price,pno)values(null,'卫龙辣条',2,5);
insert into product (pid,pname,price,pno)values(null,'旺旺雪饼',3,5);

(注1:建表时,关于timestamp类型的字段,定义时的属性可参考https://blog.csdn.net/fsp88927/article/details/80662369)
(注2:插入数据时,类型为timestamp的列不需要赋值)
在这里插入图片描述

  • 查询所有的商品
select * from product;
  • 查询商品名称和商品价格
select pname,price from product;

在这里插入图片描述

别名查询

别名查询用的是as关键字,关键字可以省略

  • 表别名(主要用在多表查询)
select p.pname , p.price from product [as] p;

在这里插入图片描述

  • 列别名(为了使查询结果更易读)
select pname [as] 商品名称 ,price [as] 商品价格 from product;

select pname as 商品名称 ,price as 商品价格 from product;
select pname 商品名称 ,price 商品价格 from product;
以上两句效果是一样的。
在这里插入图片描述

去掉重复的值

为了演示,向表中插入数据,使商品出现相同的价格

insert into product (pid,pname,price,pno)values(null,'士力架',3,5);
insert into product (pid,pname,price,pno)values(null,'牛肉干',3,5);

执行普通查询语句,查询商品的价格:
select price from product;
在这里插入图片描述
要达到去重的效果,需要在select之后加上distinct关键字。

select distinct price from product;

在这里插入图片描述

运算查询

仅仅在查询结果上做了运算

select *, price*0.9 as 折后价 from product;

在这里插入图片描述

条件查询

[where 关键字]
指定条件,确定要操作的记录

  • 查询商品价格>60的所有商品信息
select * from product where price>60;

在这里插入图片描述

  • where 后的条件写法
    关系运算符:> ,< , >= ,<= ,!=,< >
     
    < >:不等于 标准SQL语法
    !=:不等于 非标准SQL语法
    
    逻辑运算:and or not
  • 查询商品价格在10到100之间所有商品信息
select * from product where price>10 and price <100;
select * from product where price between 10 and 100;

模糊查询

关键字:like
_ : 表示一个字符
%: 表示多个字符

  • 例:查询出名字中带有“干”的所有商品(’%干%’)
select * from product where pname like '%干%';

在这里插入图片描述

  • 例:查询出名字中第二个字为"力"的所有商品(’_力%’)
select * from product where pname like '_力%';

在这里插入图片描述

范围查询

关键字:in 用来限定列中的某个范围以查找范围中的值

  • 例:查询出商品分类id在1,4,5中的所有商品
select * from product where pno in (1,4,5);

在这里插入图片描述

排序查询

关键字:order by
asc :ascend 升序(默认的排序方式)
desc :descend 降序

  • 例:查询所有商品,按照价格进行排序
select * from product order by price;

在这里插入图片描述
从图中可以看出默认的排序方式是升序。

  • 例:查询所有商品,按照价格进行降序排序
select * from product order by price desc;

在这里插入图片描述

  • 例:查询名称中有“干”的商品并按照价格进行升序排序
select * from product where pname like '%干%' order by price asc;

在这里插入图片描述

聚合函数

sunm():求和
avg():求平均值
count():统计数量
max():最大值
min():最小值
  • 获得所有商品价格的总和:
select sum(price) from product;

在这里插入图片描述

  • 获得所有商品的平均价格:
select avg(price) from product;

在这里插入图片描述

  • 获得所有商品的数量
select count(*) from product;

在这里插入图片描述

  • 注意:where条件后不能写聚合函数

  • 例:查出商品价格大于平均价格的所有商品

错误写法

select * from product where price>avg(price);

在这里插入图片描述

正确写法是使用子查询:

select * from product where price >(select avg(price) from product);

在这里插入图片描述

分组与筛选

关键字:group by

  • 例1:根据pno字段分组,分组后统计每组中的商品个数
select pno,count(*) from product group by pno;

在这里插入图片描述

  • 例2:根据pno分组,分组统计每组商品的平均价格,平均价格需要大于60
select pno,avg(price) from product group by pno having avg(price) > 60;

在这里插入图片描述
值得注意的是,having (条件筛选)关键字是可以接聚合函数的

查询语句的编写与执行顺序

编写顺序

select...from...where...group by...having..order by

执行顺序

from...where...group by...having...select...order by
发布了143 篇原创文章 · 获赞 45 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/z714405489/article/details/90524663
今日推荐