mySql
1、sql分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录 select
/*
DDL:创建(create) 删除(drop) 修改(alter) 查看(show)查询(select)
数据库:database(DB)
每一行以;隔开
是否存在:exists
*/
-- 删除数据库
drop database myDB;
-- 删除数据库:该数据库存在删除这个数据库
drop database if exists myDB;
-- 创建数据库
create database myDB;
-- 创建数据库:判断这个数据库不存在的时候才创建数据库
create database if not exists myDB;
-- 使用、切换、进入数据库
use myDB;
-- 查看数据库的基本信息
show create database myDB;
-- 查询当前所使用的数据库
select database(); -- 切换到哪个数据库,显示的就是哪个数据库
2、创建表
create table 表名(
列名1 数据类型 [属性] [约束],
列名2 数据类型 [属性] [约束],
列名3 数据类型 [属性] [约束],
......
列名4 数据类型 [属性] [约束]
);
-- 使用数据库
use mydb;
-- 删除表
drop table tb_user;
-- 创建表
create table tb_user(
userId int(11) unsigned,
userName varchar(30),
userAge int,
userHight float(4,2),
userCreateTime date,
userWeight float,
userUpdateTime timestamp
);
-- 创建学生信息表{学号 姓名 性别}
drop table tb_student;
create table tb_student(
stuId int primary key auto_increment,
stuName varchar(30) not null unique,
stuSex varchar(3) default ‘保密‘,
stuAge int
);
-- 创建成绩表
drop table tb_sorce;
create table tb_sorce(
sorceId int primary key,
stuId int,
sorceNumber float
);
-- 较为完整的流程
-- 创建数据库board
drop database if exists board;
create database board;
select database();
use board;
-- 创建表user
DROP TABLE IF EXISTS `user`;
CREATE TABLE user(
userId INT(10) PRIMARY key auto_increment not null, -- 用户编号
userName VARCHAR(30) not null, -- 用户名称
userPassword VARCHAR(32) not null -- 用户密码
);
-- 1、 增加user中的数据 语法:insert into 表名[(列名,列名)] values(值,值);
INSERT into `user`(userName,userPassword) VALUES(‘tom‘,123);
INSERT into `user`(userName,userPassword) VALUES(‘jerry‘,1234);
-- 2、 查询user表中的数据
select * from user 查询user表中所有的数据
SELECT * FROM `user` where userName=‘tom‘and userPassword=123;
-- 3、修改user表中的数据 语法:update 表名 set 列名 = 值,列名 = 值 [where条件]
update user set username = ‘Java基础‘;
-- 4、删除user表中的数据 语法:delete from 表名 [where 条件]
delete from user; -- 删除所有
delete from user where userId = 1; -- 删除编号()为1的成绩信息
3、查询:select
-- 语法:select 列名,列名 from 表名 [where 条件]
查询所有:select * from 表名
注意:
①、如果有多个条件: and(与&&) or(或||)
②、是否为空? is null 或 is not null
③、条件最基本的连接:=(等于) <>或!=(不等于) >= <= > < and or
④、in(包含):where in(值,值) --> 与or相等。
⑤、between ... and: 类似于 >= and <=,判断在某个区间之内。
基本查询:distinct、添加别名、where条件、like关键字、order by排序
-- 去重复(值) distinct
select DISTINCT stu_zhuanYe from tb_stu;
-- 查询学生的 姓名和专业
select stu_name,stu_zhuanYe from tb_stu;
-- 给列添加别名
select stu_name ‘学生姓名‘,stu_zhuanYe ‘学生专业‘ from tb_stu;
select stu_name as ‘学生姓名‘,stu_zhuanYe as ‘学生专业‘ from tb_stu;
select s.stu_id,s.stu_enter_time,s.stu_zhuanYe from tb_stu s;
-- 查询性别为‘保密’ 年龄 小于25岁
select * from tb_stu where stu_sex = ‘保密‘ and stu_age < 25; -- 两个条件都必须同时满足
select * from tb_stu where stu_sex = ‘保密‘ or stu_age < 25; -- 两个条件满足其中一个即可
-- 查看 性别为null的数据
select * from tb_stu where stu_sex is null;
select * from tb_stu where stu_sex is not null;
-- 查询性别为男或者女
select * from tb_stu where stu_sex = ‘男‘ or stu_sex = ‘女‘;
select * from tb_stu where stu_sex in(‘男‘,‘女‘); -- 不推荐大家使用 in(长度限定)
-- 查看年龄在20-25之间的学生信息
select * from tb_stu where stu_age >= 20 and stu_age <= 25;
select * from tb_stu where stu_age BETWEEN 20 and 25;
注意:
like普通使用的话,那么=是一样的效果!
一般与通配符来使用:*:零个或多个字符。 _:单个字符
①、where 列 like ‘%XX‘ --> 以包含任意字符开头,以XX结尾!
②、where 列 like ‘%XX%‘ --> 只要包含XX!
③、where 列 like ‘XX%‘ --> 以XX开头,以任意字符结尾!
④、where 列 like ‘_XX‘; --> 以_开头则代表字符占一个位!
order by:对查询结果进行排序! {desc::降序【从大到小】 asc:升序【从小到大】}
语法:select * from 表名 [where 条件] order by 列名 [desc/asc];
-- 排序 根据年龄来排序
select * from tb_stu where stu_zhuanYe = ‘SQL专业‘ order by stu_age desc;
select * from tb_stu order by stu_age desc; -- 默认是升序【asc可以省略不写】
4、聚合函数
【1】聚合函数:一般当做结果来用或者当做条件。
常用的聚合函数:
count() : 统计个数。
max() : 求最大值。 min():最小值 sum():和 avg():平均值
【2】group by:分组
group by:对结果进行分组!
语法:
select 聚合函数,分组列 from 表名 [where条件] group by 列;
【3】having:
和where类似,也是用来做筛选。一般都与group by联合使用。 having用于分组之后。
-- 统计有多个学生
select count(*) ‘学生人数‘ from tb_stu;
-- 最大年龄和最小的年龄 平均年龄 年龄和
select max(stu_age) ‘最大年龄‘,min(stu_age) ‘最小年龄‘, sum(stu_age),avg(stu_age) FROM tb_stu;
-- 聚合函数一般跟分组来使用
-- 根据性别分组[统计每个组的人数 统计每个组的平均年龄 统计每个组的年龄和]
select * from tb_stu;
select stu_sex,count(*) ‘每组的人数‘,avg(stu_age),sum(stu_age) from tb_stu GROUP BY stu_sex;
-- 根据专业来分组,并且统计了每个专业的平均年龄 选出平均年龄大于20岁的专业
select stu_zhuanYe,COUNT(stu_zhuanYe),avg(stu_age) from tb_stu where stu_zhuanYe is not null GROUP BY stu_zhuanYe;
select stu_zhuanYe from tb_stu
where stu_zhuanYe is not null
GROUP BY stu_zhuanYe HAVING avg(stu_age) >= 20;
5、联表查询
【1】什么是联表查询?
就是对多种表进行关联操作! --> 表与表之间有关联!
【2】联表查询分类:【等值连接】
内连接:查询出来的数据,是表之间关联的共同数据!
直接where条件的方式:
语法:select * from 表1 , 表2,表3 where 关联条件 [and 其他条件]
左连接的语法:
select * from 表1 left join 表2 on 关联条件; --> 以表1的数据为准,如果表2的数据不够会自动填充null;
右连接的语法:
select * from 表1 right join 表2 on 关联条件; --> 以表2的数据为准,如果表1数据不够会自动填充null;