文章目录
- 1、什么是MySQL?
- 2、常用的字段类型有哪些?
- 3、如何创建表?
- 4、如何批量插入数据?
- 5、如何更新数据?
- 6、如何删除?(慎用)
- 7、如何查询?
- 8、如何对查询到的结果进行排序(默认asc升序,可以不写),desc降序
- 9、查询语句结构,或者说先写什么,再写什么?
- 10、怎么分组?(group by & having)
- 11、怎么分页?
- 12、between的用法?
- 13、in not in的用法?------查询的结果是集合,in是在什么集合内,not in则相反。
- 14、模糊查询?
- 15、count ()的用法?------------统计
- 16、去重?--------distinct
- 17、数值类型函数的用法?
- 18、日期类型函数?
- 19、字符串函数?
- 20、内连接?——INNER JOIN
- 21、外部连接?
- 22、在查询的基础上创建新表?
- 23、where 字句可以用的条件?
1、什么是MySQL?
注意:数据库命令都是以分号;结尾的,表示结束。
Linux系统下,怎么登录MySQL?
mysql -u root (用户名) -p;
输入密码,即可登录
显示当前的数据库:show databases;
使用数据库:use 数据库名称;
查看数据表:show tables;
显示表的基本属性:describe 表名;
2、常用的字段类型有哪些?
• 1)整形(整数):
int:取值范围:-2147483648–2147483647
tinyint:取值范围:-128–127• 2)字符串:
varchar(n):可变长度
char(n):不可变长度,相对于varchar来说,char占用空间,但它也是有优点的,就是存取速度要优于varchar。• 3)日期时间:
date:yyyy-mm-dd 例如:2018-10-01
time:hh:mm:ss 例如:10:20:45
datetime:yyyy-mm-dd hh:mm:ss• 4)浮点型:(m:代表总位数,n:代表小数的位数)
float(m,n)例如:float(5,2) 就可以存储:123.22、345.98
double(m,n)和float的区别是精度较高,即存储的精确度较高
decimal(m,n)三种类型中,精度最高
- 。
3、如何创建表?
注意:
- MySQL中,写完语句后要加分号;,表示结束,表名和字段名最好用字母或字母加数字来标识,最好能是见名知意的单词
CREATE TABLE `course_` (
`cno` int(4) NOT NULL AUTO_INCREMENT,
`cname` varchar(64) NOT NULL,
`cpno` int(4) DEFAULT NULL,
`ccredit` int(4) DEFAULT NULL,
PRIMARY KEY (`cno`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4、如何批量插入数据?
注意:
- 字段名和值是一 一对应的。
- 如果插入的值是字符串类型,一定要用单引号或者双引号引起来,如果是整型或者实型,可以引也可以不引。
insert into 表名 (字段名1,字段名2) values (值1,值2);
INSERT INTO `student_` ( sno, sname, ssex, sage )
VALUES
( 16111, "黄奇齐", "男", 18 ),
( 16112, "黄奇齐", "男", 18 ),
( 16113, "黄奇齐", "男", 18 ),
( 16114, "黄奇齐", "男", 18 );
5、如何更新数据?
- 1)无条件更新
update 表名 set 字段1=值1,字段2=值2,…,字段N=值N
将所有行的sage
列 改为22
UPDATE student_
SET sage = "22" ;
- 2)条件更新
update 表名 set 字段1=值1,…,字段N=值N where 条件A and(or) 条件B and(or) …;
UPDATE student_
SET sage = "22"
WHERE
sname = "黄奇齐";
6、如何删除?(慎用)
- 1)条件删除
delete from 表名 where 条件A and(or) 条件2,…;
DELETE
FROM
student_
WHERE
sname = "黄奇齐";
- 2)无条件删除
delete from 表名 ------------ 删除的是表的数据
drop table 表名 -------------删除整个表,包括表的结构
drop database 数据库名 ------------删除数据库
7、如何查询?
- 1)查询特定字段
select 字段1,字段2,…,字段N from 表名; - 2)查寻所有字段
select * from 表名 - 3)条件查询
select … from 表名 where 条件A and(or) 条件B and(or) …; - 4)多表查询(注意:查询的字段名要带表名加一个点,查询才能够识别并查找)
select A.字段名,B.字段名 from 表A,表B,…,表N where 关联条件 and 过滤条件;
SELECT
st.sno,
st.sname,
st.ssex,
st.sage,
st.sdept,
co.cname,
sc.grade
FROM
`student_` AS st,
sc_ AS sc,
course_ AS co
WHERE
st.sno = sc.sno
AND co.cno = sc.cno;
8、如何对查询到的结果进行排序(默认asc升序,可以不写),desc降序
select 字段名 from 表名 where 条件 order by 字段X asc(desc);
SELECT
st.sno,
st.sname,
co.cname,
sc.grade
FROM
`student_` AS st,
sc_ AS sc,
course_ AS co
WHERE
st.sno = sc.sno
AND co.cno = sc.cno
ORDER BY
st.sno,
sc.grade DESC; //多列排序
9、查询语句结构,或者说先写什么,再写什么?
select 字段名 -------------查询什么字段
into 新表名 ------------查询的时候创建一个新的表
from 表名 ------------来自什么表
where 条件语句 ---------条件
group by ----------按什么字段分组
having -----------过滤条件
order by -------------排序
limit m,n -----------分页(索引从m开始,第一条索引为0,第2条索引为1;n表示每页显示的数据条数)
10、怎么分组?(group by & having)
注意:
- group by 必须和聚合函数结合使用,才有意义。常见聚合函数:sum(), count(), avg(), min(), max()等。
- group by后边的分组字段要与select 后边的字段保持一致。
- 如果过滤分组,则使用having+过滤条件来完成。
- having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。
- 而having子句在聚合后对组记录进行筛选。
- having单独使用,与where类似。
对下面这个表操作:
1)按学号分组:
SELECT
s.sno,
COUNT( s.sno ) AS 人数
FROM
sc_ AS s
GROUP BY
s.sno
2)过滤掉人数小于2的分组:
SELECT
s.sno,
COUNT( s.sno ) AS 人数
FROM
sc_ AS s
GROUP BY
s.sno
HAVING
COUNT( s.sno ) >2
3)按学号和课程号分组:
SELECT
s.sno,s.cno,
COUNT( s.sno ) AS 人数
FROM
sc_ AS s
GROUP BY
s.sno,s.cno
11、怎么分页?
select 字段名 from 表名 limit m,n;(跳过m行,查询n个)
从第4行开始,查询两行:
SELECT
*
FROM
student_
LIMIT 3,2;
随机查询一行:
SELECT
*
FROM
student_
ORDER BY
RAND( )
LIMIT 1;
12、between的用法?
- select 字段名 from 表名 where 字段名 between 值1 and 值2;(值1、值2都包括)
13、in not in的用法?------查询的结果是集合,in是在什么集合内,not in则相反。
- select 字段名 from 表名 where 条件字段 in(值1,值2,…,值N);
14、模糊查询?
- select … from … where … like ‘%xx’ ; ----%用来匹配任意长度的字符串,可以放你想放的位置(前,中,后),放在前面,说明前面可以是任意字符串,但结尾是xx
- select … from … where … like ‘_x’; -----_一个下滑线占一个位,可以匹配任意字符串,但只能匹配一个,可以用来匹配身份证号,电话号码等。
15、count ()的用法?------------统计
- select count(*)from 表名 where 条件;
16、去重?--------distinct
select distinct 字段名 from 表名;(过滤掉查询出来的重复的结果)
17、数值类型函数的用法?
语法: select min(字段名) from 表名;
- min() :最小值
- max() :最大值
- avg():平均值
- sum():求和
18、日期类型函数?
• sysdate() :系统时间函数 , yyyy-mm-dd hh:mm:ss。 语法:select sysdate();
• curdate() :系统时间函数 ,yyyy-mm-dd。 语法:select curdate();
• year():获取年份 ,如:2018。 语法:select year(curdate()); ------------获取系统当前年份
• month():获取月份。 语法:select month(curdate()); -----------获取系统当前月份
• day():获取当月第几天。 语法:select day(curdate()); ------------获取系统当前几日
• day_add():增加一个时间间隔。 语法:day_add(curdate(),interval 5 day); -----------在系统当前日期上加5天
• day_sub():减去一个时间间隔。 语法:day_sub(curdate(),interval 5 day);------------在系统当前日期减去5天
SELECT
s.sname,
SYSDATE( ),
CURDATE( ),
YEAR ( CURDATE( ) ),
MONTH ( CURDATE( ) ),
DAY ( CURDATE( ) )
FROM
student_ AS s
19、字符串函数?
concat():多个字段数据拼接。语法:select concat(字段1,字段2) from 表名;
SELECT
CONCAT( s.sname, s.sage )
FROM
student_ AS s
substr():截取数据函数。str–要操作的字符串,pos–开始截取的位置,len–截取的长度,如未指定,则截取到最后一位。
- 1)select substr(str,pos);
- 2)select substr(str,pos,len) ; —select substr(id,1,2) from student; 从student表中查询id的前两位。
length():获取一个值的长度,一般用在字符串类型字段上的情况较多。
- 1)select length(‘hello’); ----------得到的结果为5
- 2)select length(id)from student; -----获取学号的长度
20、内连接?——INNER JOIN
内连接就是使用比较运算符进行表与表之间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。(先进行笛卡尔积运算,然后再选出符合条件的列)
- 等值连接:不去掉重复的属性列
SELECT
*
FROM
student_ AS st
INNER JOIN sc_ AS s
WHERE
st.sno = s.sno
//两个一样
SELECT
*
FROM
student_ AS st
INNER JOIN sc_ AS s ON st.sno = s.sno
- 不等值连接
SELECT
*
FROM
student_ AS st
INNER JOIN sc_ AS s
WHERE
st.sno <> s.sno
- 自然连接:等值连接的一种特殊情况,两张表中的名称和类型完全一致的列进行内连接。
SELECT
*
FROM
student_ AS st
NATURAL JOIN sc_ AS s
WHERE
st.sno = s.sno
内连接的特点:只返回满足关联的条件,两个表都存在的数据。
select 表1.字段名,表2.字段名 from 表1,表2 where 表1.字段=表2.字段;
或者:
select 表1.字段名,表2.字段名 from 表1 inner join 表2 on 表1.字段=表2.字段;
21、外部连接?
注:先写左表,后写右表,匹配不到,自动补null。
- 1、左外连接:左边的表不加限制:left join 匹配不到,右表为null
SELECT
*
FROM
student_ AS st
LEFT JOIN sc_ AS s ON st.sno = s.sno
- 2、右外连接:右边的表不加限制:right join 匹配不到,左表为null
- 3、全外连接:所有两个表中的行都会包含在集合中,如果匹配不上,在各自的对应的位置显示null。 full join
场景:显示表1所有的行,与右表匹配,如果左表的行没有匹配到,对应右表的行为null。
语法:select 表1.字段名,表2.字段名 from 表1 left outer join 表2 on 表1.字段=表2.字段;
22、在查询的基础上创建新表?
select 字段名 into 新表名 from 表名;
23、where 字句可以用的条件?
- 比较运算符:=、<、>、>=等
- 逻辑运算符:and、or、not
- 范围运算符:between … and …、not between …and…
- 列表运算符:in、not in
- 字符通配符:like、notlike