该篇文章属于自己学习笔记,如有错误,还望各位大佬指出。
首先MySQL要注意这两点:1. 每句sql都要以英文下的分号(;)结尾
2. MySQL对字母大小写不敏感
1.创建数据库
create database db_name;
2. 创建表
create table tb_name(
attr1 type NOT NULL,
attr2 type,
...
//可以在最后加主键或外键等,也可以在字段上定义其他束缚
primary key(attr1)
);
3. 常用的CRUD
增
insert into tb_name (attr1,attr2,...) values(value1,value2,...);
//也可以插入所有字段的值,写法如下
insert into tb_name values(value1,value2,...);
删
delete from tb_name where condition;
改
update tb_name set attr1=[newValue], attr2=[newValue],... where condition;
查
//查询所有列信息
select * from tb_name;
//查询一个或多个列
select column_name1, column_name2 from tb_name;
注意:往往开发过程中不会使用delete操作,而是update操作,通常会为表添加一个flag字段,用来设置每条记录的状态,当要删除这条记录的时候,只是把flag设置为0,这样的做的好处就是可以保存原来的数据,方便以后分析数据。
DISTINCT
select DISTINCT column from tb_name;
使用DISTINCT关键字,会去除重复的结果,返回唯一不同的值。
ORDER BY
order by 用来给返回的结果排序
//默认是按照升序排列的
select * from tn_name order by column;
//升序
select * from tb_name order by column ASC;
//降序
select * from tb_name order by column DESC;
WHERE
where 用来限制查询条件, 限制条件可由AND或者OR连接,下面的运算符可以在条件中使用:
运算符 | 解释 |
---|---|
< | 小于 |
> | 大于 |
= | 等于 |
<> | 不等于 |
<= | 小于等于 |
between | 在····范围内(下面介绍) |
like | 符合某种格式(下面介绍) |
某些版本<>可以用 != 代替。
BETWEEN
顾名思义,between用于查询介于某个范围的记录。用法如下:
select * from tb_name where column between value1 and value2;
重要事项:不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。某些数据库会列出介于 “value1” 和 “value2” 之间的记录,但不包括value2,所以,请检查你的数据库是如何处理 BETWEEN….AND 操作符的!
LIKE
like 用来查询匹配格式的记录,用法如下:
//查询column的值是a开头的所有记录,其中 % 是通配符
select * from tb_name where column like 'a%';
常用通配符有:
通配符 | 解释 |
---|---|
% | 匹配一个或多个字符 |
_ | 只匹配一个字符 |
[a,b,c,d,…] | 匹配字符集中任意的一个字符 |
[^a,b,c,d,…]或[!a,b,c,d,…] | 匹配除字符集中的任意字符 |
有时候我们还可以使用 NOT LIKE 来查询条件的反面记录。
LIMIT
当我们查出的数据很多很多的时候,LIMIT就起到了作用,它可以截取我们想要的数据,比如,我想要查出的前10条数据,方法如下:
select * from tb_name LIMIT 10;
所以,LIMIT常用在分页操作中,方法如下:
//当LIMIT后有两个数值的时候,表示从第pageSize*(index-1)个开始,查询pageSize条数据
select * from tb_name LIMIT pageSize*(index-1),pageSize;//index表示页数
IN
IN 关键词后常常跟着一个集合,表示查询符合集合中每一个值的记录。比如:
//查询出名字叫xiaoming和xiaohong的所有记录
select * from student where name in ('XIAO Ming','XIAO Hong');
JOIN
在介绍JOIN之前,先创建两个表,方便理解。
table1 : class
class_id | class_name |
---|---|
1 | class1 |
2 | class2 |
3 | class3 |
table2 : student
stu_id | stu_name | class_id |
---|---|---|
1 | XIAO Ming | 1 |
2 | XIAO Hong | 2 |
3 | KWJ | 6 |
现在我们想要查询每一位同学属于哪一个班级和班级的信息,这个时候,查询一张表是满足不了我们的需求的,我们可以选择引用两张表,进行多表查询,如下:
select a.stu_name,b.class_name from student a, class b where a.class_id = b.class_id;
注意:多表查询的时候我们通常会给每一个表起一个别名,方便写sql,并且字段不易混淆,其别名的语法为:
tb_name as 别名
//或者
tb_name 别名
该条查询结果为:
stu_name | class_name |
---|---|
XIAO Ming | class1 |
XIAO Hong | class2 |
这时候JOIN就派上用场了,我们同样可以使用inner join实现相同的查询,如下:
select a.stu_name,b.class_name from student a inner join class b on a.class_id = b.class_id;
细心的话,我们会发现,我们并没有查出KWJ同学的信息和class3的信息,那是因为INNER JOIN 关键字在表中存在至少一个匹配时返回行。MySQL还提供了LEFT JOIN、RIGHT JOIN、FULL JOIN,下面来一一解释。
LEFT JOIN
select a.stu_name,b.class_name from student a left join class b on a.class_id = b.class_id;
查询结果为:
stu_name | class_name |
---|---|
XIAO Ming | class1 |
XIAO Hong | class2 |
KWJ |
左连接查询,会查询出左表中所有的行,即使右表没有与之匹配的数据
RIGHT JOIN
select a.stu_name,b.class_name from student a right join class b on a.class_id = b.class_id;
查询结果为:
stu_name | class_name |
---|---|
XIAO Ming | class1 |
XIAO Hong | class2 |
null(这里其实什么都没有) | class3 |
右连接查询,会查询出右表中所有的行,即使左表没有与之匹配的数据
FULL JOIN
select a.stu_name,b.class_name from student a full join class b on a.class_id = b.class_id;
查询结果为:
stu_name | class_name |
---|---|
XIAO Ming | class1 |
XIAO Hong | class2 |
KWJ | |
null(这里其实什么都没有) | class3 |
FULL JOIN 查询会列出所有的数据,即使没有相互匹配的数据
Ending~~~
感谢您的阅读