数据库
显示所有
show databases
SQL的三种注释方式
-- 注释内容
# 注释内容
/* 注释内容 */
SQL分类
DDL(Data Difinition Language) 数据定义语言
用来定义数据库对象:数据库,表,列等
如:create drop alter等
DML(Data Manipulation Language) 数据操纵语言
用来对数据库中表的数据,进行增删改查的操作
如:insert delete update
DQL(Data query language) 数据查询语言
用来查询数据库中表的数据
如:select where
DCL(Data Control language) 数据控制语言
用来定义数据库的访问权限和安全级别
如:revoke(撤销) grant(授予)
---------------------------------------------------------------------------------------------
DDL:操作数据库、表
CRUD -> 操作库 -------------------------
C:Create创建
create database databaseName;
-> 创建数据库,名字是databaseName
create database if not exists student_name;
-> student_name库,存在则不创建,不存在则创建
create database datalib_name character set gbk/utf8 ;
-> 创建数据库,并且指定字符集
create database if not exists datalib_name character set gbk/utf8 ;
-> 创建指定的数据库,判断其是否存在,存在则不创建,不存在则创建,并指定其字符集
R:Retrieve 检索 查询
show databases; ->查询所有数据库
show create database mysql; -> 查询此数据库的创建语句,及编码集
U:Update 更新
alter database datalib_name character set utf8;
-> 将数据库的字符集更改为utf-8
D:Delete 删除
drop database datalib_name;
-> 删除某个数据库
drop database if exists datalib_name;
-> 删除某个存在的数据库
Use:使用数据库
select database();
-> 查询正在使用的数据库
use datalib_name;
-> 使用数据库
CRUD -> 操作表 -------------------------
C:Create创建
create table table_name(
列名1 数据类型,
列名2 数据类型,
...
列名n 数据类型n
);
注意:最后不要写逗号
create table table_name01 like table_name_source;
-> 创建一个表,复制table_name_source中的内容
R:Retrieve 检索 查询
show tables;
-> 查询所有表
desc table_name;
-> 查询表接口
U:Update 更新
alter table old_table_name rename to new_table_name;
-> 更新表名称
alter table table_name character set gbk/utf8;
-> 将表的字符集格式更改为gbk/utf8
alter table table_name add column_name data_type;
-> 增加一列,数据类型为data_type
alter table table_name drop column_name;
-> 删除一列
alter table table_name change old_column_name new_column_name data_type;
-> 将 old_column_name 更改为 new_column_name 数据类型更改为 data_type
alter table table_name modify column_name data_type
-> 只是更改了一下类型
D:Delete 删除
alter table table_name drop column_name;
-> 删除一列
DML增删改,表中的数据
添加数据
insert into table_name(col_name_1,col_name_2,col_name_3 , ... , column_name_n)
value(value_1,value_2,value_3 ... value_n);
-> 添加一条数据,如果需要全部添加则table_name后无需跟小括号
删除数据
delete from table_name where score = 1;
-> 删除score为1的记录
如果不加条件,则删除全部数据
truncate table table_name;
-> 删除表中全部数据建议使用此命令
删除表,在创建一个一模一样的表
修改数据
update table_name set column_name = value where field = value;
-> column_name = value 需要修改的列和值
-> field = value 需要修改的列的字段的限制条件
DQL查询表中的记录
select * from table_name;
-> 查询所有;
1、语法
select
field(字段)
from
table_name_01,table_name_02 ...
where
condition(条件列表)
group by
group field(分组字段)
having
group after condition (分组之后的条件)
order by
排序
limit
分页限定
2、基础查询
2.1 多个字段的查询
select field_01 , field_02 ... ifnull(field_n,0) as other_name from table_name
-> 查询字段1到字段n的结果集,如果字段n为null,将值替换为可以替代的类型 other_name
例:
select name,math_score,english_score,math_score+ifnull(english_score,0)
as sum_score from student;
-> 查询 name,math_score,english_score 和 math_score + english_score 的和,
如果english_score的值为空,则替换为0
-> 并给此列命名一个别名 sum_score
2.2 去除重复的值
select distinct field_name from table_name;
-> 去除重复的值
2.3 计算列
select name,math_score,english_score,math_score+ifnull(english_score,0) as sum_score from student;
-> 计算math_score+ifnull(english_score,0)
-> ifnull(english_score,0) english_score:这个字段可能出现空值 0:在该字段出现null值的时候 用0替换
2.4 起别名
select name as other_name from table;
-> name 字段 查询的结果集定义一个其他的名字
3、条件查询
3.1 运算符
>、<、<=、>=、=、<><>在 SQL 中表示不等于,在 mysql 中也可以使用!=
BETWEEN...AND 在一个范围之内,如:between 100 and 200
相当于条件在 100 到 200 之间,包头又包尾
IN(集合) 集合表示多个值,使用逗号分隔
LIKE '张%' 模糊查询
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL
具体操作:
-- 查询 math 分数大于 80 分的学生
select * from student3 where math>80;
-- 查询 english 分数小于或等于 80 分的学生
select * from student3 where english <=80;
-- 查询 age 等于 20 岁的学生
select * from student3 where age = 20;
-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
select * from student3 where age <> 20;select * from student3 where age != 20;
3.2 逻辑运算符
and 或 && 与,SQL 中建议使用前者,后者并不通用。
or 或 || 或
not 或 ! 非 具体操作:
具体操作:
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)select * from student3 where age>35 and sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)select * from student3 where age>35 or sex='男';
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id=1 or id=3 or id=5;
3.3 in 关键字
SELECT 字段名 FROM 表名 WHERE 字段 in(数据 1, 数据 2...);in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
具体操作:
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id in(1,3,5);
-- 查询 id 不是 1 或 3 或 5 的学生
select * from student3 where id not in(1,3,5);
3.4 范围查询
BETWEEN 值 1 AND 值 2
表示从值 1 到值 2 范围,包头又包尾
比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100
具体操作:
查询 english 成绩大于等于 75,且小于等于 90 的学生
select * from student3 where english between 75 and 90;
3.5 like 关键字
LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
MySQL 通配符
通配符 说明
% 匹配任意多个字符串
_ 匹配一个字符
具体操作:
-- 查询姓马的学生
select * from student3 where name like '马%';select * from student3 where name like '马';
-- 查询姓名中包含'德'字的学生
select * from student3 where name like '%德%';
-- 查询姓马,且姓名有两个字的学生
select * from student3 where name like '马_';
4、排序查询
4.1 Order by
select * from table_name order by field_01 desc , field_02 asc;
--> desc:降序 asc: 升序
--> field_01 desc 是第一条件,当第一条件有相同时,使用第二条件field_02 asc
5、聚合函数
5.1 count 计算个数
-->select count(field) from table_name;
-->select count( ifnull( field )) from table_name;
5.2 max 计算最大值
-->select max(field) from table;
5.3 min 计算最小值
-->select min(field) from table;
5.4 sum 计算和
-->select sum(field) from table;
5.5 avg 计算平均值
-->select avg(field) from table;
-->聚合函数的计算排除了空值,null
6、group by
6.1 select field_1,count(field_2) from table_name group by field_1;
--> 以field_1进行分组,分组之后显示field_1,统计field_2
--> 分组之后,不要加其他字段,要不加聚合函数,要不加分组所用字段
7、having
select field_1,count(field_2) from table_name group by field_1 having count(field_2)> 2;
--> 分组之后条件限制,限制本组个数大于2条记录的显示出来
8、limit (这是一个方言,适用于MySQL)select * from table_name limit start_index,page_number;
数据类型:
1. int:整数类型
age int,
2. double:小数类型
score double(5,2)
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
name varchar(20):姓名最大20个字符
zhangsan 8个字符 张三 2个字符