MySQL——基本语法

本文详细介绍了SQL的基本概念,包括约束类型如非空、唯一、主键和外键约束,以及如何创建数据库、表,进行数据的增删改查操作。此外,还讲解了查询语句的使用,包括条件查询、排序、限制、聚合操作以及表连接的方法。

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

http://www.w3school.com.cn/sql/sql_union.asp

一、约束
https://blog.youkuaiyun.com/w_linux/article/details/79655073

非空约束(not null) :不需为空
唯一性约束(unique)  : unique约束的字段,具有唯一性,不可重复,但可以为null
主键约束(primary key) PK  :给某个字段添加主键约束之后,该字段不能重复也不能为空,还会默认添加”索引——index”
外键约束(foreign key) FK  : 某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值

二、创建数据库、表,增删该查
https://www.cnblogs.com/heyangblog/p/7624645.html
创建数据库 create database dataname;
在这里插入图片描述
创建表 create table Student(
-> Sno int(4) unsigned primary key comment ‘学号’,
-> Sname varchar(16) unique comment ‘姓名’,
-> Ssex enum(‘男’,‘女’) comment ‘性别’,
-> Ssage tinyint(3) unsigned comment ‘年龄’,
-> Sdept varchar(20) comment ‘所在系’
-> );
在这里插入图片描述
插入信息:INSERT INTO Student VALUES (1002, ‘李四’, ‘男’, 20, ‘英语’);
在这里插入图片描述insert Student into set 字段=‘字段值’;
在这里插入图片描述
修改字段:update Student set 字段=‘字段值’ where 条件;
在这里插入图片描述查询select

select*from 表名 [where 条件];

eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来

select field1,field2,…fieldn… from 表名 [where 条件];

eg:select id,name,age from students;//查询 students 表中所有记录, 只显示出 id,name,age三个字段的值

查询不重复的字段 select distinct 字段 from 表名;
在这里插入图片描述
带条件查询 select 字段 from 表名 where 条件;
where后面的条件可以用>、<、>=、<=、!=等多种比较运算符,多个条件之间可以用or、and等逻辑运算符
在这里插入图片描述排序,限制
排序 select * from 表名 [where 条件] [ order by field1 [desc/asc],field2 [desc/asc]… ];
1.desc 降序排列,asc 升序排列
2.order by 后面可以跟多个不同的排序字段,每个排序字段都可以有不同的排序顺序。
3.如果排序字段的值一样,则相同的字段按照第二个排序字段进行排序。
4.如果只有一个排序字段,则字段相同的记录将会无序排列。
在这里插入图片描述
限制select … [limit 起始偏移量,行数];
在这里插入图片描述聚合
select 字段 fun_name from 表名 [where 条件] [group by field1,field2…] [with rollup] [having 条件];

eg:

1.fun_name 表示要做的聚合操作,也就是说聚合函数,常用的有 : sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
2.group by关键字 表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
3.with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
4.having 关键字表示对分类后的结果再进行条件过滤。
统计出所有人数
mysql> select count(1) from Student;
在这里插入图片描述按性别统计出人数,并按性别分组
mysql> select Ssex,count(1) from Student group by Ssex;
在这里插入图片描述
分组后再次统计出总人数
select Ssex,count(1) from Student group by Ssex with rollup;
在这里插入图片描述
按年龄统计分组select Ssage,count(1) from Student group by Ssage;
分组后在统计出人数大于两人的组select Ssage,count(1) from Student group by Ssage having count(1)>2;
在这里插入图片描述查询出最大年龄与最小年龄select max(Ssage),min(Ssage) from Student;
在这里插入图片描述
表连接分为内连接和外连接。
他们之间最主要的区别:内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
±-----±-------±-----±------±----------+
| Sno | Sname | Ssex | Ssage | Sdept |
±-----±-------±-----±------±----------+
| 1002 | 李四 | 男 | 20 | 英语 |
| 1003 | 王五 | 男 | 22 | 计算机 |
| 1004 | 赵六 | 女 | 20 | 英语 |
| 1005 | 钱七 | 男 | 21 | 计算机 |
| 1006 | 孙八 | 男 | 20 | 计算机 |
| 1007 | 李九 | 男 | 22 | 数学 |
| 1008 | NULL | 男 | 23 | NULL |
±-----±-------±-----±------±----------+
±----±----------+
| Cno | Cname |
±----±----------+
| 1 | 英语 |
| 2 | 高数 |
| 3 | 计算机 |
| 4 | 单片机 |
| 5 | java |
±----±----------+
±-----±----±------+
| Sno | Cno | Score |
±-----±----±------+
| 1002 | 1 | 90 |
| 1003 | 1 | 54 |
| 1003 | 2 | 62 |
| 1003 | 3 | 81 |
| 1003 | 4 | 80 |
| 1003 | 5 | 72 |
| 1003 | 6 | 88 |
| 1003 | 7 | 77 |
| 1003 | 8 | 67 |
| 1004 | 1 | 92 |
| 1005 | 1 | 53 |
| 1005 | 4 | 63 |
| 1005 | 7 | 77 |
| 1006 | 1 | 70 |
| 1006 | 2 | 82 |
| 1006 | 4 | 78 |
| 1006 | 6 | 68 |
| 1006 | 8 | 55 |
| 1007 | 2 | 76 |
| 1007 | 4 | 90 |
| 1007 | 6 | 89 |
| 1008 | 1 | 81 |
| 1008 | 2 | 48 |
±-----±----±------+
内连接
select 字段 from 表 where 条件;
在这里插入图片描述
外连接 分为左连接和右连接
左连接:包含所有左边表中的记录,甚至是右边表中没有和他匹配的记录。
右连接:包含所有右边表中的记录,甚至是右边表中没有和他匹配的记录。
外连接(左连接):
select 字段 from 表 left join 表 on 条件;

外连接(右连接):
select 字段 from 表 right join 表 on 条件;

IN/ONT IN 关键字
select [关键字] from [表] where 关键字 [not] in (查询域);
mysql> select Sno,Sname from Student
-> where Sno in (select Sno from SC group by Sno having count(Sno)>4); #查询选课数大于4门的同学,学号姓名。
±-----±-------+
| Sno | Sname |
±-----±-------+
| 1003 | 王五 |
±-----±-------+
1 row in set (0.00 sec)

删除delete语句delete from SC ;
delete from SC where Sno between 1004 and 1008; 删除学号在1004到1008之间的学生。
delete from SC; 删除所有表内容。
drop table SC; 删除表
drop database SC; 删除数据库

### MySQL 基本语法规则 #### 数据库操作命令 创建一个新的数据库可以使用 `CREATE DATABASE` 语句。删除现有数据库可以通过 `DROP DATABASE` 实现。 ```sql -- 创建名为 mydb 的新数据库 CREATE DATABASE mydb; -- 删除名为 mydb 的数据库 DROP DATABASE mydb; ``` 选择要使用的数据库,需利用 `USE` 关键字[^1]。 ```sql -- 使用mydb作为当前工作数据库 USE mydb; ``` #### 表结构管理指令 对于表的操作主要包括创建 (`CREATE TABLE`) 和移除 (`DROP TABLE`) 。定义表格时应指定列名及其数据类型等属性。 ```sql -- 创建一张学生信息表student_info CREATE TABLE student_info ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), age TINYINT UNSIGNED, PRIMARY KEY (id) ); -- 移除已有的students表 DROP TABLE students; ``` 当需要向已有表中增加新的字段或者调整现有字段的信息时,可采用 `ALTER TABLE` 来完成此任务。 ```sql -- 向student_info表添加email字段 ALTER TABLE student_info ADD COLUMN email VARCHAR(100); ``` #### SQL 查询基础 为了获取所需的数据记录,通常会运用 `SELECT ... FROM` 结构来构建查询请求,并可通过附加条件进一步筛选结果集。例如: ```sql -- 获取所有学生的姓名和年龄 SELECT name, age FROM student_info; -- 只返回那些超过18岁的学生的名字 SELECT name FROM student_info WHERE age > 18 ORDER BY name ASC; ``` 这里也展示了如何按照某个或某些字段对输出的结果进行排序,即通过追加 `ORDER BY` 子句实现升序(`ASC`) 或降序(`DESC`)排列[^2]。 #### 插入、更新与删除数据 插入新纪录至目标表内需要用到 `INSERT INTO...VALUES(...)` 形式的命令;而如果想要更改已经存在的某条或多条记录,则应该考虑应用 `UPDATE...SET...WHERE...` 这样的模式来进行相应设置;最后,在必要情况下还能借助于 `DELETE FROM...WHERE...` 完成特定条件下匹配项的清除动作。 ```sql -- 添加一条关于张三的学生资料进入student_info表里 INSERT INTO student_info(name,age,email) VALUES('Zhang San',20,'zhangsan@example.com'); -- 将ID等于1的同学名字改为李四 UPDATE student_info SET name='Li Si' WHERE id=1; -- 清理掉所有邮箱地址为空的学生档案 DELETE FROM student_info WHERE email IS NULL; ``` #### 控制逻辑流程 在更复杂的场景下编写触发器或是存储过程的时候,可能会涉及到一些控制流元素比如判断分支(if/else)、循环体(for/do while),以及异常捕捉机制等等。下面给出了一段简单的例子展示怎样在一个触发器内部实施数值范围校验并作出适当响应[^3]: ```sql DELIMITER // CREATE TRIGGER upd_check BEFORE UPDATE ON account FOR EACH ROW BEGIN IF NEW.amount < 0 THEN SET NEW.amount = 0; ELSEIF NEW.amount > 100 THEN SET NEW.amount = 100; END IF; END// DELIMITER ; ``` 上述代码片段实现了这样一个功能:每当尝试修改账户余额amount时都会先检查其值是否合理——一旦发现小于零就自动重置为最小边界值0;反之大于最大限额100的话也会被限定不超过这个上限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值