MYSQL快速入门

  • 理解SQL 语句的执行过程
  • 掌握SQL 语句的基本语法
  • 掌握SQL 语句的增删改查操作

1.SQL 分类

MySQL 是关系型数据库系统 ,其中存储了大量的数据,通过SQL 管理数据库配置和数据。
结构化查询语言(SQL),对数据库进行操作的语句。

2.DDL 语句

数据定义语句(Data Definition Language,DDL),通过这类语言可以对数据库、表、列等元数据进行创建、删除、更改。

  • 数据库的创建、删除、属性修改;
  • 表的创建、删除、更新;
  • 列的更新,插入等操作。
    库表列叫做元数据

3.DML 语句

数据操纵语句(Data Manipulation Language,DML),用于添加(增)、删除(删)、更新(改)和查询(查)数据库记录并检查数据完整性。

4.DCL 语句

数据控制语句(Data Control Language,DCL),通过此类语句可以对数据库的相关权限进行设置。

  • 某一个用户是否可以从某一个地址登录数据库;
  • 某一个用户是否可以增删改查某一个数据库的表中数据。

5.DDL 语句

数据定义语句 。对数据库内部数据库、表、列进行创建、删除、修改等操作的语言,DDL 语句更多的是由数据库管理员DBA 使用。

|-----------------|------------------|-------------------------|
| 命令 | 解释 | 示例 |
| show databases; | 查看所有数据库列表 | |
| use ; | 进入数据库 切换数据库 | use information_schema; |
| show tables; | 查看数据库中表名 | |
| desc |查看表的定义 | desc mysql.user; | |

bbs ----+
        |
        +-- user        # 存储用户信息
        |
        `-- message     # 存储用户留言

1.数据库操作

1.创建一个数据库,名为bbs。

MariaDB [(none)]> create database bbs;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]>

2.删除数据库

删库是一个非常危险的操作,请慎重!

MariaDB [(none)]> drop database bbs;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]>

3.创建数据库的同时指定默认编码。

MariaDB [(none)]> create database bbs default character set utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]>

4.切入数据库bbs。

MariaDB [(none)]> use bbs;
Database changed
MariaDB [bbs]>

2.表操作

1.进行表的操作之前,需要确定表所在数据库。

MariaDB [bbs]> select database();
+------------+
| database() |
+------------+
| bbs        |
+------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

2.数据库规划,user 表:

user            # 存储用户信息的
    id          # 用户id,主键,int(10)
    username    # 用户名,varchar(255)
    password    # 用户密码 varchar(255)
    imgpath     # 用户的头像 varchar(255)

3.创建user 表(create table user)

MariaDB [bbs]> create table user(id int(10) not null auto_increment primary key, username varchar(255) not null, password varchar(255) not null, imgpath varchar(255));
Query OK, 0 rows affected (0.00 sec)

MariaDB [bbs]> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| user          |
+---------------+
1 row in set (0.00 sec)

MariaDB [bbs]> desc user;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | NO   |     | NULL    |                |
| password | varchar(255) | NO   |     | NULL    |                |
| imgpath  | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [bbs]> show create table user\G
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `imgpath` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

MariaDB [bbs]>

注意:

  • \G 就是用来代替; 使用,以显示更多的内容。

4.数据库规划,message 表:

message         # 存储用户留言信息
    id          # 留言的 ID,主键,int(10)
    uid         # 该条留言的主人的ID int(10)
    title       # 留言的标题 varchar(255)
    content     # 留言的内容 varchar(255)

5.创建message 表

MariaDB [bbs]> create table message (id int(10) not null auto_increment primary key, uid int(10) not null, title varchar(255) not null, content varchar(255) not null);
Query OK, 0 rows affected (0.01 sec)

MariaDB [bbs]> show create table message\G
*************************** 1. row ***************************
       Table: message
Create Table: CREATE TABLE `message` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `uid` int(10) NOT NULL,
  `title` varchar(255) NOT NULL,
  `content` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

MariaDB [bbs]>

6.表的删除

删除操作要慎重,变通的方法是给表改名。

MariaDB [bbs]> drop table user;
Query OK, 0 rows affected (0.00 sec)

MariaDB [bbs]> drop table message;
Query OK, 0 rows affected (0.00 sec)

MariaDB [bbs]>

7.更改表名

基本句式为alter table 表名 rename [to] 新的表名;,将表user 的名字改为users。

MariaDB [bbs]> alter table user rename users;
Query OK, 0 rows affected (0.01 sec)

MariaDB [bbs]> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| message       |
| users         |
+---------------+
2 rows in set (0.00 sec)

MariaDB [bbs]>

3.列操作

1.查看表的定义

MariaDB [bbs]> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | NO   |     | NULL    |                |
| password | varchar(255) | NO   |     | NULL    |                |
| imgpath  | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

2.修改表中列类型

基本句式为alter table 表名 modify [column] 列名 列定义 [first|after 列名];。将表user 中字段username 的类型修改为varchar(50),并将其移动到pasword 字段后面。

MariaDB [bbs]> alter table users modify username varchar(50) not null after password;
Query OK, 0 rows affected (0.02 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [bbs]> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| password | varchar(255) | NO   |     | NULL    |                |
| username | varchar(50)  | NO   |     | NULL    |                |
| imgpath  | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>字段

3.删除表列

基本句式为alter table 表名 drop [column] 列名;,将表user 中字段imgpath 删除。

MariaDB [bbs]> alter table users drop imgpath;
Query OK, 0 rows affected (0.02 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [bbs]> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| password | varchar(255) | NO   |     | NULL    |                |
| username | varchar(50)  | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

MariaDB [bbs]>

4.增加表中列

基本句式为alter table 表名 add [column] 列名 列定义 [first|after 列名];,向表user 中增加字段imgpath。

MariaDB [bbs]> alter table users add imgpath varchar(255);
Query OK, 0 rows affected (0.02 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [bbs]> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| password | varchar(255) | NO   |     | NULL    |                |
| username | varchar(50)  | NO   |     | NULL    |                |
| imgpath  | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

5.列改名

基本句式为alter table 表名 change 旧的列名 新的列名 列定义 [first|after 列名];,将表user 中字段imgpath 的名字改为img_path。

MariaDB [bbs]> alter table users change imgpath img_path varchar(255);
Query OK, 0 rows affected (0.02 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [bbs]> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(10)      | NO   | PRI | NULL    | auto_increment |
| password | varchar(255) | NO   |     | NULL    |                |
| username | varchar(50)  | NO   |     | NULL    |                |
| img_path | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

6.DML 语句

  • insert
  • delete
  • update
  • select

1.查询所有内容

MariaDB [bbs]> select * from users;
Empty set (0.00 sec)

MariaDB [bbs]>

2.跨库跨表查询

select * from mysql.users;
select * from mysql.users\G

注意:

  • select 的查询结果是一张表,而且是一张虚拟的表;
  • select 语句不会修改表中原来的数据。

3.插入记录

  • 核心思路:向哪张表中的哪个字段中插入数据,内容是什么?
  • 插入记录,基本句式为insert into 表名( 列名1, 列名2,...) values( '值1', '值2', ...);,向表users 中插入用户ajest,其密码是123456。

    MariaDB [bbs]> insert into users( username, password) values( 'ajest', '123456');
    Query OK, 1 row affected (0.01 sec)

    MariaDB [bbs]> select * from users;
    +----+----------+----------+----------+
    | id | password | username | img_path |
    +----+----------+----------+----------+
    | 1 | 123456 | ajest | NULL |
    +----+----------+----------+----------+
    1 row in set (0.00 sec)

    MariaDB [bbs]> insert into users( username, password) values( 'root', '123456'), ( 'admin', '123456');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2 Duplicates: 0 Warnings: 0

    MariaDB [bbs]> select * from users;
    +----+----------+----------+----------+
    | id | password | username | img_path |
    +----+----------+----------+----------+
    | 1 | 123456 | ajest | NULL |
    | 2 | 123456 | root | NULL |
    | 3 | 123456 | admin | NULL |
    +----+----------+----------+----------+
    3 rows in set (0.00 sec)

    MariaDB [bbs]>

批量插入留言
MariaDB [bbs]> insert into message(uid,title,content)values(1,"Hello","My Name is AJEST"),(2,"OK?","Hi,AJEST!How are you?"),(1,"ok!","I'm fine!Thank you!"),(3,"Hello","My Name is admin!");
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [bbs]> select * from message;
+----+-----+-------+-----------------------+
| id | uid | title | content               |
+----+-----+-------+-----------------------+
|  1 |   1 | Hello | My Name is AJEST      |
|  2 |   2 | OK?   | Hi,AJEST!How are you? |
|  3 |   1 | ok!   | I'm fine!Thank you!   |
|  4 |   3 | Hello | My Name is admin!     |
+----+-----+-------+-----------------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>
思考与练习:
  • root 用户进行留言,题目是Hero,内容是I want to be a hero!

    insert into messages(uid,title,content)values(2,"Hero","I want to be a hero!");

  • 新注册一个用户,名字是tom,密码是[123.com]。

    insert into users(username,password)values("tom","123.com");

  • tom 留言,内容是Where are you, jerry?

    insert into messages(uid,content)values(4,"Where are you,jerry?",);

4.更新记录

核心思路:将哪张表中的哪个列更新(修改)为指定的值,过滤条件是什么?

修改用户ajest 的密码为http://123.com

MariaDB [bbs]> update users set password="123.com";
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

MariaDB [bbs]> select * from users;
+----+----------+----------+----------+
| id | password | username | img_path |
+----+----------+----------+----------+
|  1 | 123.com  | ajest    | NULL     |
|  2 | 123.com  | root     | NULL     |
|  3 | 123.com  | admin    | NULL     |
+----+----------+----------+----------+
3 rows in set (0.01 sec)

MariaDB [bbs]> update users set password="123456";
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

MariaDB [bbs]> select * from users;
+----+----------+----------+----------+
| id | password | username | img_path |
+----+----------+----------+----------+
|  1 | 123456   | ajest    | NULL     |
|  2 | 123456   | r/oot     | NULL     |
|  3 | 123456   | admin    | NULL     |
+----+----------+----------+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]> update users set password='123.com' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [bbs]> select * from users;
+----+----------+----------+----------+
| id | password | username | img_path |
+----+----------+----------+----------+
|  1 | 123.com  | ajest    | NULL     |
|  2 | 123456   | root     | NULL     |
|  3 | 123456   | admin    | NULL     |
+----+----------+----------+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]>

删除记录

核心思路:从哪张表中删除记录,条件是什么?

从表users 中删除用户ajest。

delete from users where id=1;

查询记录

核心思路:确定查询的内容,从哪张表中查,过滤条件是什么?

查询表users 中所有用户名。

MariaDB [bbs]> select username from users;
+----------+
| username |
+----------+
| ajest    |
| root     |
| admin    |
+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]>

查询用户名以及密码。

MariaDB [bbs]> 
+----------+----------+
| username | password |
+----------+----------+
| ajest    | 123.com  |
| root     | 123456   |
| admin    | 123456   |
+----------+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]>

5.查询进阶

1.查询不重复记录

关键字distinct 放在字段前面,起到修饰作用,过滤掉重复记录。

MariaDB [bbs]> select distinct password from users;
+----------+
| password |
+----------+
| 123.com  |
| 123456   |
+----------+
2 rows in set (0.01 sec)

MariaDB [bbs]>

2.条件查询

where 按照一定的条件,将表的一部分输出到屏幕中。

  • 如果屏幕中有内容输出,认为过滤条件为真;
  • 如果屏幕中无内容输出,认为过滤条件为假;

|------|------|
| 过滤条件 | 查询内容 |
| 真 | 有 |
| 假 | 无 |

查询用户ajest 的所有信息。

MariaDB [bbs]> select * from users where id=1;
+----+----------+----------+----------+
| id | password | username | img_path |
+----+----------+----------+----------+
|  1 | 123.com  | ajest    | NULL     |
+----+----------+----------+----------+
1 row in set (0.00 sec)

MariaDB [bbs]>

查询root 用户的密码。

MariaDB [bbs]> select password from users where username='root';
+----------+
| password |
+----------+
| 123456   |
+----------+
1 row in set (0.00 sec)

MariaDB [bbs]>

思考与练习:

  • 如何查询用户ajest 的id?
    select id from users where username='ajest';

  • 用户ajest 所有的留言是什么?
    select * from messages where uid='1';

6.排序

关键字order by 对查询结果,依据列内容的规律进行排序。

1.(默认)升序排序,使用关键字asc

MariaDB [bbs]> select * from message order by id asc;
+----+-----+-------+-----------------------+
| id | uid | title | content               |
+----+-----+-------+-----------------------+
|  1 |   1 | Hello | My Name is AJEST      |
|  2 |   2 | OK?   | Hi,AJEST!How are you? |
|  3 |   1 | ok!   | I'm fine!Thank you!   |
|  4 |   3 | Hello | My Name is admin!     |
+----+-----+-------+-----------------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

2.降序,使用关键字desc

MariaDB [bbs]> select * from message order by id desc;
+----+----------+----------+----------+
| id | password | username | img_path |
+----+----------+----------+----------+
|  2 | 123456   | root     | NULL     |
|  1 | 123.com  | ajest    | NULL     |
|  3 | 123456   | admin    | NULL     |
+----+----------+----------+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]>

按照message 表中,第二列进行排序。

MariaDB [bbs]> select * from message order by 2;
+----+-----+-------+-----------------------+
| id | uid | title | content               |
+----+-----+-------+-----------------------+
|  1 |   1 | Hello | My Name is AJEST      |
|  3 |   1 | ok!   | I'm fine!Thank you!   |
|  2 |   2 | OK?   | Hi,AJEST!How are you? |
|  4 |   3 | Hello | My Name is admin!     |
+----+-----+-------+-----------------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

7.限制

可以用limit 关键字从结果集合中取得(第几条开始,取得几条)记录。

1.查询第一条留言

MariaDB [bbs]> select * from message where id = 1;
+----+-----+-------+------------------+
| id | uid | title | content          |
+----+-----+-------+------------------+
|  1 |   1 | Hello | My Name is AJEST |
+----+-----+-------+------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

2.查询最后一条留言

MariaDB [bbs]> select * from message order by id desc limit 0,1;
+----+-----+-------+-------------------+
| id | uid | title | content           |
+----+-----+-------+-------------------+
|  4 |   3 | Hello | My Name is admin! |
+----+-----+-------+-------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

8.聚合

聚合就是对表中记录进行统计。

1.使用sum()

计算message 表中所有id 值之和

MariaDB [bbs]> select id from message;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

MariaDB [bbs]> select sum(id) from message;
+---------+
| sum(id) |
+---------+
|      10 |
+---------+
1 row in set (0.00 sec)

MariaDB [bbs]>

2.使用count()

计算出users 表中用户数量。

MariaDB [bbs]> select count(*) from users;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)

MariaDB [bbs]>

4.使用max()

统计message.id 字段记录中最大值。

MariaDB [bbs]> select id from message;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

MariaDB [bbs]> select max(id) from message;
+---------+
| max(id) |
+---------+
|       4 |
+---------+
1 row in set (0.00 sec)

MariaDB [bbs]>

5.使用min()

统计message.id 字段记录中最小值。

MariaDB [bbs]> select min(id) from message;
+---------+
| min(id) |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

MariaDB [bbs]>

6.GROUP BY 分类聚合

通过一个key 进行分组计数。

统计每个用户留言的数量。

MariaDB [bbs]> select uid,count(*) from message group by uid;
+-----+----------+
| uid | count(*) |
+-----+----------+
|   1 |        2 |
|   2 |        1 |
|   3 |        1 |
+-----+----------+
3 rows in set (0.00 sec)

MariaDB [bbs]>

9.子查询

一个查询需要另外一个查询的结果参与的时候,用子查询。

查询出所有留过言用户的名字

MariaDB [bbs]> select username from users where id in (select uid from message); 
+----------+
| username |
+----------+
| ajest    |
| root     |
| admin    |
+----------+
3 rows in set (0.01 sec)

MariaDB [bbs]>

查询出所有没有留过言用户的名字

MariaDB [bbs]> select username from users where id not in (select uid from message); 
Empty set (0.00 sec)

MariaDB [bbs]>

关键字exists 结果集合中是否有记录

MariaDB [bbs]> select exists(select * from users);
+-----------------------------+
| exists(select * from users) |
+-----------------------------+
|                           1 |
+-----------------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

not exists 与exists 相反。

MariaDB [bbs]> select not exists(select * from users where id=0);
+--------------------------------------------+
| not exists(select * from users where id=0) |
+--------------------------------------------+
|                                          1 |
+--------------------------------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

10.表连接

同时查询多张表。

同时查询出用户名,留言标题,留言内容。

MariaDB [bbs]> select user.username, message.title, message.content from users, message where users.id=message.uid;
+----------+-------+-----------------------+
| username | title | content               |
+----------+-------+-----------------------+
| ajest    | Hello | My Name is AJEST      |
| root     | OK?   | Hi,AJEST!How are you? |
| ajest    | ok!   | I'm fine!Thank you!   |
| admin    | Hello | My Name is admin!     |
+----------+-------+-----------------------+
4 rows in set (0.01 sec)

MariaDB [bbs]>

除了以上写法,还有很多其他变形语句,SQL 语句可以非常灵活,大家注意识别。

select u.username, m.title, m.content from users as u, message as m where u.id=m.uid;

select u.username, m.title, m.content from users u, message m where u.id=m.uid;

select u.username, m.title, m.content from (select * from users)u, (select * from message)m where u.id=m.uid;

左连接:横向拼接。

MariaDB [bbs]> select u.username, m.title, m.content from users u left join message m on u.id=m.uid;
+----------+-------+-----------------------+
| username | title | content               |
+----------+-------+-----------------------+
| ajest    | Hello | My Name is AJEST      |
| root     | OK?   | Hi,AJEST!How are you? |
| ajest    | ok!   | I'm fine!Thank you!   |
| admin    | Hello | My Name is admin!     |
+----------+-------+-----------------------+
4 rows in set (0.00 sec)

MariaDB [bbs]>

11.联合查询

同时查询多张,纵向链接

利用联合查询,查出所用用户和留言信息

MariaDB [bbs]> select * from users union select * from message;
+----+----------+----------+-----------------------+
| id | password | username | img_path              |
+----+----------+----------+-----------------------+
|  1 | 123.com  | ajest    | NULL                  |
|  2 | 123456   | root     | NULL                  |
|  3 | 123456   | admin    | NULL                  |
|  1 | 1        | Hello    | My Name is AJEST      |
|  2 | 2        | OK?      | Hi,AJEST!How are you? |
|  3 | 1        | ok!      | I'm fine!Thank you!   |
|  4 | 3        | Hello    | My Name is admin!     |
+----+----------+----------+-----------------------+
7 rows in set (0.00 sec)

MariaDB [bbs]>

两张表具有相同的列数。

MariaDB [bbs]> select 1,2,3,4;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
1 row in set (0.00 sec)

MariaDB [bbs]> select 5,6,7,8,9;
+---+---+---+---+---+
| 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+
| 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+
1 row in set (0.00 sec)

MariaDB [bbs]> select 1,2,3,4 union select 5,6,7,8,9;
ERROR 1222 (21000): The used SELECT statements have a different number of columns
MariaDB [bbs]>

列类型相同(数字比较特殊)。

常见运算符

MySQL 提供了一些运算符号,可以在SQL 语句中使用,比如需要对SQL 语句中的某个值,或者某个字段做运算操作的时候,就可以使用这些运算符。

比较运算符

|---------|----------|
| 运算符 | 含义 |
| = | 字段等于固定的值 |
| > | |
| < | |
| >= | |
| <= | |
| <> != | 不等于 |

查询出留言id 大于3 的所有留言。

MariaDB [bbs]> select * from message where id > 3;
+----+-----+-------+-------------------+
| id | uid | title | content           |
+----+-----+-------+-------------------+
|  4 |   3 | Hello | My Name is admin! |
+----+-----+-------+-------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

逻辑运算符

参与逻辑运算的操作数是布尔类型的值。

  • 真,表示为True 或1。
  • 假,表示为False 或0。

    MariaDB [bbs]> select true;
    +------+
    | TRUE |
    +------+
    | 1 |
    +------+
    1 row in set (0.00 sec)

    MariaDB [bbs]> select false;
    +-------+
    | FALSE |
    +-------+
    | 0 |
    +-------+
    1 row in set (0.00 sec)

    MariaDB [bbs]>

and 与运算:有假则假。

|-------|------------------------|-------------------------|
| and | True | False |
| True | True and True = True | True and False = False |
| False | False and True = False | False and False = False |

or 或运算:有真则真。

|-------|------|-------|
| or | True | False |
| True | True | True |
| False | True | False |

! 非运算:真假取反。

|----|-------|-------|
| ! | True | False |
| -- | False | True |

^ 异或运算:异真同假。

|-------|-------|-------|
| ^ | True | False |
| True | False | True |
| False | True | False |

查询出id 在2 到4 之间的留言。

MariaDB [bbs]> select * from message where id >2 and id < 4;
+----+-----+-------+---------------------+
| id | uid | title | content             |
+----+-----+-------+---------------------+
|  3 |   1 | ok!   | I'm fine!Thank you! |
+----+-----+-------+---------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>

逻辑运算对真假性的影响。

|----------------|------------------------|
| 语句 | 说明 |
| and 1=1 or 1=2 | 判断条件的真假性取决于and 之前语句真假性 |
| and 1=2 | 恒假 |
| or 1=1 | 恒真 |

算数运算符

|-----|----|
| 运算符 | 含义 |
| + | |
| - | |
| * | |
| / | |

MariaDB [bbs]> select 10/3=1+1;
+----------+
| 10/3=1+1 |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

MariaDB [bbs]>

运算符优先级

逻辑运算与and 的优先级高于逻辑运算或or。

MariaDB [bbs]> select 1=1 or 1=2 and 1=2;
+--------------------+
| 1=1 or 1=2 and 1=2 |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

MariaDB [bbs]> select 1=1 or (1=2 and 1=2);
+----------------------+
| 1=1 or (1=2 and 1=2) |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

MariaDB [bbs]> select (1=1 or 1=2) and 1=2;
+----------------------+
| (1=1 or 1=2) and 1=2 |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.00 sec)

MariaDB [bbs]>
相关推荐
余衫马37 分钟前
CentOS7 离线安装 Postgresql 指南
数据库·postgresql
E___V___E1 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
m0_748254882 小时前
mysql之如何获知版本
数据库·mysql
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
mikey棒棒棒2 小时前
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
数据库·redis·lua·redisson·watchdog·cas·并发锁
星星点点洲3 小时前
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
java·mysql
水手胡巴3 小时前
oracle apex post接口
数据库·oracle
_院长大人_4 小时前
Docker Mysql 数据迁移
mysql·adb·docker
史迪仔01125 小时前
【SQL】SQL多表查询
数据库·sql
Quz6 小时前
MySQL:修改数据库默认存储目录与数据迁移
数据库·mysql