My SQL常用的基本操作命令

本文详细介绍MySQL数据库的基础知识,包括常用字段类型、表的创建、数据的增删改查、SQL语句结构、分组与分页、条件筛选及各种函数应用,适合初学者快速掌握MySQL操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yelvens

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值