MySQL 命令(二)

运算符

=   等于
<>  不等于    >   >=   <  <=
like  像  ,模糊查询  %用来通配
-- INSERT INTO grade(g_name,g_student_num) VALUES('HTML1804',45);
#查询所有
SELECT * FROM grade;
#查询班级名称包含1804
SELECT * FROM grade WHERE g_name LIKE '%1804';
/*
%a  匹配以a结尾的内容
%a%     包含a的内容
a%  a开头的内容
a%b 以a开头以b结尾的内容
*/
#查询名字不包含1804的班 not LIKE
SELECT * FROM grade WHERE g_name NOT LIKE '%1804%';
#查询id大于6的
SELECT * FROM grade WHERE id>6;

多条件查询

/*
查询数据
SELECT 列1,列2 FROM 表名
*/
SELECT * FROM grade;
SELECT g_name FROM grade;
#查询去重  DISTINCT
SELECT DISTINCT g_name FROM grade;
#需要查询的结果都一样才能去重,重复的标准是所有字段都一样
SELECT DISTINCT g_name,g_student_num FROM grade;
/*
多条件查询
and  OR:在条件句中把两个或多个条件结合起来
*/
SELECT * FROM grade WHERE g_name='222' AND id>5;
SELECT * FROM grade WHERE g_name='222' OR id>5;
# 多条件查询可以添加括号
#女的  and (漂亮 OR 活的)
SELECT * FROM grade WHERE id>=4 AND(g_student_num=222 or g_student_num=55);
 

限制查询

/*
限制数量:limit
select * from 表名 limit 5  查询数据,并限制结果数据最多为5条
跳过指定数量的数据 OFFSET
select * from 表名 limit 5 OFFSET 5
*/
SELECT * FROM grade LIMIT 3;
SELECT * FROM grade LIMIT 3 OFFSET 3;
 

between和IN

/*BETWEEN  在值之间
select * FROM 表名 where 列1 BETWEEN value1 AND VALUE2
IN      存在于提供的多个值中
select * FROM 表名 where 列1 IN (value1 , VALUE2...)
*/
#操作符between...and  会选取介于两个值之间的数据范围
#范围是全闭合的。没有什么左闭右开之类的
#WHERE id BETWEEN 4 AND 8;运行时会转换成 id>=4 AND id<=8
SELECT * FROM grade WHERE id BETWEEN 4 AND 8;
#in的案例
SELECT * FROM grade WHERE g_student_num in('55','45','222');
SELECT * FROM grade WHERE g_student_num in('55','45','222') LIMIT 2 OFFSET 2;
 

字段约束

1、primary key :唯一标识表中每行的这个列是主键。没有主键,更新或删除表中的行会很困难。

表中的任何列都可以作为主键,只要它满足一下条件:

1、任意两行都不具有相同的主键值

2、主键列不允许为NULL

优化:

1、不更新主键列中的值

2、不重用主键列的值

2、foreign key:某个表中的一列,它包含另一个表的主键值。定义了两个表之间的关系

3、unique

跟主键一样,都具有唯一约束的功能

每个表只能有且只有一个主键,unique可以作用在多个字段上

4、default

5、null 和 not null

CREATE DATABASE Learn charset=utf8;
USE Learn;
#约束字段时,最好是固定长度或者可变空间非常具体的数据类型
#不可用给text加唯一约束
CREATE table student (id int primary key auto_increment,
                                            s_name VARCHAR(16) UNIQUE);

#插入数据
INSERT INTO student(s_name) VALUES('YISS');
INSERT INTO student(s_name) VALUES('uzi'),('FAKER'),('CLEARLOVE');
INSERT INTO student(s_name) VALUES('uzi');
#主键和unique都有唯一约束功能
INSERT INTO student(id,s_name) VALUES (5,'荣耀黄金');
 

左右链接

#主外键级联
CREATE DATABASE LearnForeignKey charset=utf8;
USE LearnForeignKey;
#创建年级表
CREATE TABLE Grade(id INT PRIMARY KEY auto_increment,g_name VARCHAR(16),
g_position VARCHAR(16));
#REFERENCES外键指向
#student表中的 g_id 指向了 grade表中的id
#实现了一种一对多的数据关系 1:N
CREATE TABLE Student(id INT PRIMARY KEY auto_increment,
                                        s_name VARCHAR(16),g_id INT,
                                        FOREIGN KEY student(g_id) REFERENCES        grade(id));
 

左右链接删除时的限制:

1、restrict ----报错

2、no action -----报错

3、cascade ------暴力删除,会把年级下面的学生都干掉

4、set null ------设置为UNLL,前提是该字段要允许为null

INSERT INTO grade(g_name,g_position) VALUES ('python1710','31教室'),('python1711','40教室');
INSERT INTO student(s_name,g_id) VALUES ('夏鑫',1),('夏鑫1',1),('夏鑫2',1);
INSERT INTO student(s_name,g_id) VALUES ('王馨梦',2),('王鑫梦1',2),('王新梦2',2);
#一个表中的外键会指向另一个表中的主键
#一个表可以有多个外键
#外键约束在插入的时候,如果外键值在引用的表中不存在,插入失败
INSERT INTO student(s_name,g_id) VALUES ('王馨梦',3),('王鑫梦1',3),('王新梦2',3);
SELECT * FROM student WHERE g_id =2;
#JOIN   加入,有的时候为了得到更完整的结果,我们需要从两个或者更多的表中获取数据,
#就需要使用join
#原始写法  从多个表中查询数据
SELECT * FROM student,grade WHERE student.g_id=grade.id;
#直接用join
SELECT * FROM student JOIN grade ON student.g_id=grade.id;
#left JOIN
SELECT * FROM student LEFT JOIN grade ON student.g_id=grade.id;
#RIGHT JOIN
SELECT * FROM student RIGHT JOIN grade ON student.g_id=grade.id;
#JOIN 多表查询  join有左连接和右连接
#以join为分界线
#LEFT JOIN 以分界线左边的表为基准,进行数据查询,如果左边数据多会用null来进行填充右侧
#RIGHT JOIN 以分界线右边的表为基准,进行数据查询,如果右边的数据多会用null来进行左侧填充
#数据多,指的是级联的数据,没有和它对应的,如果grade表中的id在student表中从来没有出现过。
#INNER JOIN 与join 是相同的,没有匹配的数据,就不进行列出
SELECT * FROM student INNER JOIN grade ON student.g_id=grade.id;
#UNION 操作符用于合并两个或多个select语句的结果集
#UNION 选取不同的值,如果允许重复的值,使用union ALL
#mysql没有full JOIN
SELECT * FROM student LEFT JOIN grade ON student.g_id=grade.id
UNION
SELECT * FROM student RIGHT JOIN grade ON student.g_id=grade.id
 
原文地址:https://www.cnblogs.com/gugubeng/p/9714526.html