MySQL学习笔记

MySQL学习笔记

该篇文章属于自己学习笔记,如有错误,还望各位大佬指出。

首先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~~~
感谢您的阅读

你可能感兴趣的:(MySQL)