MYSQL基础DAY07

MYSQL基础

1.1关系型数据库 oracle mysql sql server SQLite

1.2非关系型数据库 redis Mongodb Hbase

1.3 SQL语句操作数据库的语句

1.不区分大小写
MySQL特点:1.可移植性好
2.支持多操作系统
3.支持多种编写语言
4.开源免费
5.支持多种数据库连接
6.支持多线程
7.支持多种编码格式
8.优化sql的查询算法
连接mysql

在这里插入图片描述

常用数据类型:int varchar decimal datatime

2.1操作数据库
查看所有的数据库 show databases;
使用数据库: use 数据库名;
查看当前使用的数据库: select database();
创建数据库:create database 数据库名 charset=utf-8;
删除数据库:drop database 数据库名;
2.2操作表
查看所有表 show tables;
查看表结构 desc 表名;
建表语句:show create table 表名;
删除表: drop table students;
判断是否存表,存在就删除:drop table if exists 存在表名;
创建表:create table students(
id int unsigned primary key auto_increament,
字段 id 无符号 设置主键为自动增加
name varchar(20),
字段name 数据类型varchar 长度=《20
height decimal(10,2)
可以取10位,小数为两位
);
插入表两种方式:
1.insert into 表名 values(字段1,字段2,字段3);如果字段1为字符串,需要加’ '或者“ ”
2.insert into表名(字段1,字段2)value(对应值1,对应值2);
插入多条数据
insert into 表名 values(字段1,字段2,字段3),
(字段1,字段2,字段3),
(字段1,字段2,字段3),
(字段1,字段2,字段3);

修改表

update 表名 set 字段1=值1,字段值2=值2 where 条件
updata students set  name=“张三”,age=“20”   where id=5;

删除数据

delete from 表名 where 字段=“ ”
truncate table 表名 删除表中数据并保留表结构
drop table 表名 删除表 包括结构

查询

select 字段 from 表名;
1.去重 distinct
select distinct 字段 from 表
2.起别名
给表起别名select 字段1,字段2 from 表名 as 别名;

​ select 字段1 as 别名,字段2 as别名 from 表名 ;

3.条件查询
比较运算符 = , < ,> ,!= ,<=, >= .
!= 等价于 where not= “ ”
逻辑运算符 and or

4.模糊查询

%:匹配多个字符
_ :匹配任意一个字符
select 字段1,字段2 from 表名 where 字段1 like ‘x%’
like可以和and连用
select *from students where name like "百里%";
查询姓名为两个字符的人
SELECT * from students WHERE name LIKE "__";
查询姓名为两个字且年龄小于20岁的
SELECT * from students WHERE name LIKE "__"and age<=20;
between… and … 表示连续的范围
查询年龄在18-20岁之间的学生
select * from students WHERE age between 18 and 20;
in 表示非连续的顺序 查询 家乡在 广州 上海或 北京的女生; where in () and… (记得双引号)
SELECT *from students WHERE hometown in("北京","广东","上海") and sex="女";
is null 空判断 ,
SELECT * FROM students WHERE card is null;
is not null 非空判断
SELECT * FROM students  WHERE  card is not null;  
SELECT * FROM students  WHERE not card is  null;  效果同上

5.排列查询 默认升序

降序desc 大到小 查询学生信息 按年龄从大到小排
SELECT * FROM students ORDER BY age DESC
查询学生信息 按年龄从大到小排 当年龄相同时,从大到小排列
SELECT * FROM students ORDER BY age DESC,studentNo DESC;
升序 asc 小到大
SELECT * FROM students ORDER BY age asc
SELECT * FROM students ORDER BY age

聚合函数 where 中不可以用聚合函数。

count() 查询总记录数
SELECT COUNT(name) from students where sex="女"and age<=18;
max() 查询最大值
SELECT max(age) FROM students WHERE sex="女";
min() 查询最小值
SELECT min(age) FROM students WHERE sex="女";
sum() 求和
SELECT sum(age) FROM students WHERE sex="女";
avg() 求平均数
SELECT avg(age) FROM students WHERE sex="女";

分组查询 group by

select 字段1,字段2,聚合函数… from 表名 group by 字段1,字段2;
将学生信息按性别分组,找出最大值,统计平均值,并且统计各组个数。
SELECT sex,max(age),count(*),avg(age) FROM students GROUP BY sex;
先按班级分组,后按性别分组,之后统计男女个数,最大年龄,以及平均年龄。
SELECT class,sex,count(*),max(age),avg(age)from students GROUP BY  class,sex;
group不能和where连用,having的作用=where;
SELECT class,sex from students GROUP BY class,sex HAVING sex="女";

分页查询 select * from students limit(n-1)*m,m

n:第几页的数据

m:每页显示三条数据

select 字段 from 表名 limit 0,5 从索引1开始查询5个数据,每页显示五条数据
select * fom students limit 0,5;
select * fom students limit 5;   默认为0
select 字段 from 表名 limit 10,5 从索引10开始查询5个数据,每页显示五条数据
select * fom students limit 10,5;

连接(左右内连接查询)

在这里插入图片描述

内连接

格式1
select * from 表1
inner join 表2 on 表1.列=表2.列
格式2
select * from 表1,表2 where 表1.列=表2.列
三表联查
SELECT stu.name sn,cs.name cn,sc.score ss FROM students stu INNER JOIN scores sc on stu.studentNo= sc.studentno 
INNER JOIN courses cs on sc.courseNo=cs.courseNo 
WHERE stu.sex = "男"
ORDER BY sc.score DESC
LIMIT 0,3;
左连接
SELECT * FROM students stu LEFT JOIN scores sc on stu.studentNo= sc.studentNo 
left JOIN courses co on co.courseNo= sc.courseNo;
右连接
SELECT * FROM students stu right JOIN scores sc on stu.studentNo= sc.studentNo 
right JOIN courses co on co.courseNo= sc.courseNo;
自关联(看成n张表)
SELECT *from areas a1 INNER JOIN areas a2 on a1.aid=a2.pid
INNER JOIN areas a3 on a2.aid=a3.pid;
子查询
标量查询 =
SELECT *FROM scores where studentno=(SELECT studentno FROM students WHERE name="王昭君");

在这里插入图片描述

列子查询 in
SELECT score from scores WHERE studentno in (SELeCT studentno FROM students WHERE age="18");

在这里插入图片描述

行子查询()=
SELECT *from students WHERE(class,age)=(SELECT class,age FROM students WHERE name="王昭君");

在这里插入图片描述

子查询充当数据源
SELECT co.name,sc.score from scores as sc INNER JOIN(
SELECT *from courses where name in ('数据库','系统测试'))
as co on co.courseNo=sc.courseNo;

在这里插入图片描述

in 和 =any 等价(子查询)
not in和 !=all等价 (子查询)
子查询充当条件
SELECT * from scores where studentno 
in(SELECT studentNo from students where age 
BETWEEN 18 and 20);
子查询充当数据源
SELECT * from scores as sc INNER JOIN (SELECT studentNo 
from students where age BETWEEN 18 and 20 ) as st
on st.studentNo=sc.studentno;

主键和外键

主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。

询充当条件

SELECT * from scores where studentno 
in(SELECT studentNo from students where age 
BETWEEN 18 and 20);
子查询充当数据源
SELECT * from scores as sc INNER JOIN (SELECT studentNo 
from students where age BETWEEN 18 and 20 ) as st
on st.studentNo=sc.studentno;

主键和外键

主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值