MySql基础知识

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;

MySql基础知识

上一篇:mysql json


下一篇:Redis入门-什么是NoSQL