MYSQL的SQL的语句
SQL:Structure Query Lauguage 结构化查询语言
DDL:数据定义语言:定义数据库,数据表他们的结构:create(创建) drop(删除) alter(修改)
DML:数据操纵语言:主要是用来操作数据 。insert(插入) update (修改) delete(删除)
DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
DQL:数据查询语言:select(查询) from 子句 where 子句
数据库的CRUD的操作
登录账号密码均为 root 的数据库服务器 : mysql -uroot -proot
创建数据库
create database 数据库名字;
create database mysqldb;
create database 数据库名字 character set 字符集;
create database mysqldb character set utf8;
create database mysqldb character set utf8 collate utf8_bin;
查看数据库
--查看数据库定义的语句
show create database 数据库的名字
show create database mysqldb;
--查看所有的数据库
show databases;
修改数据库的操作
--修改数据的字符集
alter database 数据库的名字 character set 字符集
alter database mysql charecter set gbk;
删除数据库
drop database 数据库的名字;
drop database mysqldb;
其他数据库的操作命令
--切换数据库
use 数据库的名字
use mysqkdb2;
---查看当前正在使用的数据库
select database();
数据库中表的CRUD的操作
创建表
create table 表名(
列名1 列的类型(长度) 约束,
列名2 列的类型(长度) 约束
);
列的类型
java sql
int int
char/String char/varchar
char :固定长度
varchar:可变长度
char(3): 1 存储时 1空格空格
varchar(3):1 存储时 1
double double
float float
boolean boolean
date date :YY-MM-DD
time:HH:MM:SS
datetime : YY-MM-DD HH:MM:SS 默认值为:null
timestamp: YY-MM-DD HH:MM:SS 默认值为:使用当前时间
列的约束
列的约束:
主键约束:primary key
唯一约束:unique
非空约束:not null
案列:1.分析实体 :学生
学生 ID
姓名
性别
年龄
create table student(
sid int primary key,
sname varchar(10),
set int,
age int
);
删除表
drop table heima;
sql完成对表中数据的CRUD的操作
插入数据
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
inset into student(sid ,sname ,sex ,age) values (1,'aodi1',1,23);
简化的写法
insert into 表名 values(值1,值2,值3);
insert into student values (2,'aodi2',1,23);
注意:
inset into student(sid ,sname ) values (1,'aodi');
insert into student values (2,'aodi'); //这种写法是 错误的,
--批量插入
insert into student values
(4,'aodi2',1,23),
(5,'aodi2',1,23),
(6,'aodi2',1,23);
注意:批量插入的效率比分别插入3条数据的效率高。但是若有一条数据错误,
批量插入会报错,全部的数据都不能插入,而分别插入 则只有错误的数据失败。
命令行插入中文问题:insert into student values(11,“李四”,1,24);
原因:
解决方案:
临时解决方案 :set names gbk ;相当于时高速mysql 服务器软件,我们当前在命令行下输入的内容是
GBK编码,当命令窗口关闭之后,它再输入中文就会存在问题。
永久解决方案:修改 my.ini 配置文件(再mysql 软件的安装路径里)utf8改成gbk
- 暂停mysql的服务
- 再mysql安装路径中找到myini 配置文件
- 将57 行的编码改成gbk,保存
- 重新启动mysql
删除记录
delete from 表名 [where 条件]
delete from student where sid = 10;
delete from student; 如果没有指定表中数据,将一条一条 全部删除掉表中数据。
--面试题:请说 delete 和 truncate 删除数据有什么区别
delete : DML 一条一条删除表中的数据
truncate : DDL 先删除 表 再重建表
如果 表中数据量少 ,delete 比较高效
如果 表中数据量多 ,truncate 比较高效
更新表记录
update 表名 set 列名= 新值 ,列名 2 = 新值2 [where 条件]
update student set sname = '历史' where sid =5;
查询表记录
select [distinct][*][列名,列名2] from 表名 [where 条件]
distinct : 去除重复的数据
select * from from student ; 查询学生的信息
对表中数据的多种需求查询
--创建新表:商品表
商品ID
商品名称
商品价格
时间
商品分类ID
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp,
cno int
);
insert into product values(null,'小米mix4',998,null,1);
insert into product values(null,'锤子',2888,null,1);
insert into product values(null,'阿迪王',99,null,2);
insert into product values(null,'老村长',88,null,3);
insert into product values(null,'劲酒',35,null,3);
insert into product values(null,'小熊饼干',1,null,4);
insert into product values(null,'卫龙辣条',1,null,5);
insert into product values(null,'旺旺大饼',1,null,5);
1. 查询所有的商品 select * from product;
2. 查询商品的名称和商品价格 select pname , price from product;
3. 别名查询 as 关键字 可省略。
表别名:select p.pname ,p.price from product as p;主要用于多表查询
列别名:select pname [as] 商品名称,price 商品价格 from product ;
4. 去掉重复值,查询商品所有的价格:select distinct price from product;
5. select 运算,仅在查询中做了运算。
查询 8 折 商品:select pname , price*0.8 as 折后价 from product;
--条件查询[where关键字] 指定条件,确定要操作的记录
6. 查询商品价格 大于60元商品 select * from product where price>60;
7. 查询商品价格 不等于66元商品
--关系运算符 : > >= <= = != <>
select * from product where price <>66; <> 不等于 :标准sql 语法
select * from product where price !=66; != 不等于 :非标准sql语法
8. 查询商品再 10 到 100 之间
select * from product where price > 10 and price < 100;
select * from product where price between 10 and 100;
---逻辑运算:and or not
9. 查询商品价格 小于10 和 大于100元商品
select * from product where price < 10 or price > 100;
--like : 模糊查询
_ : 代表的是一个字符
%:代表多个字符
10. 查询出名字中带有饼的所有商品 select * from product where pname like '%饼%';
11. 查询出名字中第二个字是熊的所有商品 select * from product where pname like '_熊%';
-- i n 在某个范围中获得值
12. 查询出商品分类ID 在1,4,5 里面的所有商品 select * from product where cno in (1,4,5);
-- 排序查询 : order by 关键字
asc : ascend 升序 (默认的排序方式)
desc:descend 降序
13.查询 所有的商品 铵价格进行排序 select * from product order by price;
14.查询所有的商品,铵价格进行降序排序 select * from product order by price desc
15. 查询名称带小的商品 ,铵价格进行升序
select * from product where pname like '%小%' order by price asc;
---聚合函数:
sum():求和
avg():求平均值
count():统计数量
max():最大值
min():最小值
16. 获得 所有商品价格的总和 select sum(price) from product :
17. 获得所有商品的平均价格 select avg(price) from product;
18. 获得所有商品的个数 select count(*) from product;
--注意:where 条件 后面不能接聚合函数
19. 查询商品价格大于平均价格的所有商品
--错误写法:select * from product where price > avg(price);
--正确写法:select * from product where price >(select avg(price) from product);
--分组:group by
20. 根据cno字段 分组,分组后统计商品的个数
select cno,count(*) from product group by cno;
细解 group by
select * from product;
—select * from product GROUP BY cno;
select cno 分组编号,COUNT(*) from product GROUP BY cno;
-- having 关键字 可以接 聚合函数 出现再分组 之后
-- where 关键子 它是不可以 接聚合函数 ,出现再分组之前
21. 根据cno字段 分组,分组统计每组商品的平均价格 并且商品平均价格 > 60
select cno , avg(price) from product group by cno having avg(price) >60;
--查询语句的编写顺序
S..F..W..G..H..O
select ..from..where..group by..having..order by..
-- 查询语句的执行顺序
F..W..G..H..S..O
from..where..group by..having..select..order by..