文章目录

  • 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中,写完语句后要加分号;,表示结束,表名和字段名最好用字母或字母加数字来标识,最好能是见名知意的单词

mysql基础命令大全 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;

mysql基础命令大全 mysql的基本命令_字段_02

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; //多列排序

mysql基础命令大全 mysql的基本命令_字段名_03

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类似。

对下面这个表操作:

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_04

1)按学号分组:

SELECT
	s.sno,
	COUNT( s.sno ) AS 人数 
FROM
	sc_ AS s 
GROUP BY
	s.sno

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_05


2)过滤掉人数小于2的分组:

SELECT
	s.sno,
	COUNT( s.sno ) AS 人数 
FROM
	sc_ AS s 
GROUP BY
	s.sno 
HAVING
	COUNT( s.sno ) >2

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_06

3)按学号和课程号分组:

SELECT
	s.sno,s.cno,
	COUNT( s.sno ) AS 人数 
FROM
	sc_ AS s 
GROUP BY
	s.sno,s.cno

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_07

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

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_08

19、字符串函数?

concat():多个字段数据拼接。语法:select concat(字段1,字段2) from 表名;

SELECT
	CONCAT( s.sname, s.sage ) 
FROM
	student_ AS s

mysql基础命令大全 mysql的基本命令_字段名_09


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

mysql基础命令大全 mysql的基本命令_字段名_10

  • 不等值连接
SELECT
	* 
FROM
	student_ AS st
	INNER JOIN sc_ AS s 
WHERE
	st.sno <> s.sno

mysql基础命令大全 mysql的基本命令_字段_11

  • 自然连接:等值连接的一种特殊情况,两张表中的名称和类型完全一致的列进行内连接。
SELECT
	* 
FROM
	student_ AS st
	NATURAL JOIN sc_ AS s 
WHERE
	st.sno = s.sno

mysql基础命令大全 mysql的基本命令_表名_12


内连接的特点:只返回满足关联的条件,两个表都存在的数据。

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

mysql基础命令大全 mysql的基本命令_mysql基础命令大全_13

  • 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