【MySQL必知必会】之入门篇

前言

SQL 是用于访问和处理数据库的标准的计算机语言,通过 SQL 来管理数据。

结构化查询语言 (SQL) 是用于访问数据库的标准语言,这些数据库包括 SQL Server、Oracle、MySQL、Sybase 以及 Access 等等。以下使用 MySQL 数据库进行说明,MySQL的安装可以参考另一篇博文【Linux开发环境搭建】之MySQL安装

数据库操作

连接数据库
mysql -u root -p
mysql -uroot -proot
创建数据库
create database;
create database set utf8;
create database set 字符集 collate 校对规则
查看所有数据库
show database;
修改数据库的操作
--修改数据的字符集
alter database 数据库的名字 character set 字符集 
alter database blog set gbk
删除数据库
drop database 数据库名字
其他数据库操作命令
--使用数据库
use database 数据库名字
--查看当前使用的数据库
select database();

表的CURD操作

创建表
create table 表名(
    列名 列的类型 约束
); 

create table User(
    id int(10) not null,
    usrname varchar(10) not null
);

列的类型(与Java数据类型对比):

Java SQL
int int
char/string char/varchar
char:固定长度,会用空格补全字符位数
varchar:可变长度,不会用空格补全字符位数
double double
float float
boolean boolean
date date:YYYY-MM-DD
time:hh:mm:ss
datetime:YYYY-MM-DD hh:mm:ss 默认值是null
timestamp:YYYY-MM-DD hh:mm:ss 默认使用当前时间
double double
None text: 存取文本
None blob:存取二进制

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

创建表(例子):
1. 分析实体:学生
2. 学生ID
3. 姓名
4. 性别
5. 年龄

create table student(
 sid int primary key,
 sname varchar(30) not null,
 sex int,
 age int
);
查看表
-- 查看所有表
show tables;
-- 查看表的定义
show create table 表名;
-- 查看表的结构
desc 表名
修改表
-- 添加列(add)
alter table 表名 add 列名 列的类型 列的约束
alter table student add chengji int not null;
-- 修改列(modify)
alter table student modify sex varchar(2);
-- 修改列名(change)
alter table student change sex gender varchar(2);
-- 删除列(drop)
alter table student drop chengji;

-- 修改表名(rename)
rename table student to studentd
-- 修改表的字符集
alter table student character set utf8
删除表
drop table student;

SQL完成对表的CURD操作

插入数据
-- 插入一条数据
-- 如果插入的是全列名的数据,表名后面的列名可以省略
insert into student values(1,'yekongle',1,23);
-- 如果插入的是部分的列,则列名不能为空
insert into sutdent(sid,sname) values(2,'yekong');

-- 批量插入
insert into student values(3,'zhangsan',1,23),(4,'zhangsansan',23);

-- 单条插入和批量插入的效率

-- 查看表中数据
select * from student;
删除记录
-- Demo: delete from table 表名 where 条件
delete from table student where sid = 1;
-- 如果没有指定条件,会将表中数据全都删掉
delete from student;

面试问题: 请说一下delete 删除数据 和 truncate 删除数据有什么区别?

delete: DML 一条一条删除表中的数据
truncate: DDL 先删除表再重建表

关于哪条执行效率高,具体要看表中的数据量
- 如果数据量比较少,delete 比较高效
- 如果数据量比价多,truncate 比较高效

更新记录
update 表名 set 列名=列的值,列名2=列的值 [where 条件]

-- 将sid为2的名字改成李四
update student set sname='李四' where sid = 2;
查询记录
select [distinct] [*]  from 表名 where 条件
distinct: 去除重复的数据

--Demo
--实体1:商品分类
1. 分类的ID
2. 分类名称
3. 分类描述

--创建商品分类表
create table category(
 cid int primary key auto_increment,
 cname varchar(10),
 cdesc varchar(100)
);

--插入数据
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,
 cno int 
);

-- 插入数据 
insert into product values(null,'小米mix',3998,null,1);
insert into product values(null,'三星note9',5998,null,1);
insert into product
values(null,'华为P20',6998,null,1);
insert into product values(null,'苹果iphone x',7998,null,1);
insert into product values(null,'卫龙辣条',9.8,null,2);
insert into product values(null,'旺旺饼干',19.8,null,2);
insert into product values(null,'可乐',2.5,null,3);
insert into product values(null,'雪碧',2.5,null,3); 
insert into product values(null,'李宁运动裤',59,null,4);
insert into product values(null,'龙腾冰箱',1998,null,5);

--查询所有商品
select * from product;

--查询商品名称和商品价格
select pname,price from product;

--别名查询,as 的关键字,as 关键字可以省略
--表别名:
select p.pname,p.price from product as p

--列别名
select pname as 商品名称,price as 商品价格 from product;

--去掉重复的值
--查询商品所有的价格
select distinct price from product;

--select运算查询
select *,price*1.5 as oprice from product;

--条件查询(where 关键字)
--关系运算符 > >= < <= = != <>
select * from product where price > 60;

--查询商品价格不等于88的所有商品
select * from product where price <> 88;

--查询商品价格在10到100之间
select * from product where price between 10 and 100;

--逻辑运算:and , or, not
--查询商品价格小于100或者商品价格大于900
select * from product where price <100 or price >900; 

--like:模糊查询
_ :代表一个字符
% :代表多个字符

--查询出名字中带有饼所有商品 '%饼%'
select * from product where pname like '%饼%';
--查询第二名字是熊的所有商品 '_李%'
select * from product where pname like '_李%';


-- in 在某个范围中获得值
--查询出商品分类ID在1 4 5 里的所有商品
select * from product where cno in (1,4,5);

--排序查询: order by 关键字
asc:ascend 升序
desc:descend 降序

--0. 查询所有商品,按照价格进行排序
select * from product order by price;
--1.查询所有的商品,按照价格进行降序排序
select * from product order by price desc;
--2.查询商品名称有 “小” 的商品,按价格降序排序
select * from produc where pname like '%小%' order by price desc;

--聚合函数
sum(): 求和
avg(): 求平均值
count(): 统计数量
max(): 最大值
min(): 最小值

--1.获得所有商品的价格的总和
select sum(price) from product;

--2.获得所有商品的平均价格
select avg(price) from product;

--3.获得所有商品的个数
select count(*) from product;

注意: where 条件后面不能接聚合函数
--查询商品价格大于平均价格的所有商品
--子查询
select * from product where price >(
select avg(price) from product);

--分组(group by)
-- 1.根据cno字段分组,分组后统计商品的个数
select cno,count(*) from product group by cno;

--2.根据cno分组,分组统计每组商品的平均价格,并且平均价格大于60

--having关键字,可以接聚合函数,出现在分组后
--where关键字,不可以接聚合函数,出现在分组前

select cno,avg(price) from product group by cno having avg(price) >60;


--执行顺序
from .. where .. group by .. having .. select .. order by..

猜你喜欢

转载自blog.csdn.net/qq_23483671/article/details/81529627