MySql___(5) MySQL 必知必会

第3章 使用MySql

3.1 连接
3.2 选择数据库

首先在登录数据库情况,可以先使用 show databases;展示出有哪些数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 9                  |
| book               |
| bookstore          |
| db_9griddiary      |
| db_database13      |
| hibernate          |
| hwp_db             |
| jdbc01             |
| mysql              |
| onlinexam          |
| performance_schema |
| test               |
+--------------------+
13 rows in set (0.06 sec)

输入 USE book

输出 Database changed

表示选中了book数据库;

3.3 了解数据库和表

SHOW TABLES; 返回当前选择的数据库内可用表的列表。

输入 SHOW TABLES;

输出

mysql> SHOW TABLES;
+------------------+
| Tables_in_book   |
+------------------+
| book_info        |
| product_tb       |
| tb_studnet_batch |
+------------------+

SHOW也可以用来显示表列:

输入 SHOE COLUMNS FROM book_info;

输出

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| name      | varchar(200) | NO   |     | NULL    |                |
| price     | double       | NO   |     | NULL    |                |
| bookCount | int(11)      | NO   |     | NULL    |                |
| author    | varchar(45)  | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

**SHOE COLUMNS ** 要求给出一个表名,它对应每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如字段id的auto_incerement)。

其他的SHOW语句还有:

SHOW STATUS ,用于显示广泛的服务器状态信息;

SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;

SHOW ERRORSSHOW WARNINGS,用来显示服务器错误或警告消息;

第4章 检索数据

4.1 SELECT 语句
4.2 检索单个列

输入

SELECT name FROM book_info;

上述语句利用SELECT语句从book_info表中检索一个名name的列。所需的列名在SELECT关键字之后给出,FROM关键字指出从其中检索数据的表名。此语句的输出如下所示:

+----------------------+
| name                 |
+----------------------+
| JAVAWeb              |
| 1111                 |
| 名称一               |
| 或者                 |
| 名称一               |
| 山月不知心底事       |
| 致我们终将逝去的青春 |
| 平凡的世界           |
| aj                   |
| 我是作者             |
+----------------------+

未排序数据“如果读者自己试验这个查询,可能会发现显示输出的数据顺序与这里的不同。出现这种情况很正常。如果没有明确排序查询结果(下一章介绍),则返回的数据的顺序没有特殊意义。返回数据的顺序可能是数据被添加到表中的顺序,
也可能不是。只要返回相同数目的行,就是正常的。

结束SQL语句多条SQL语叶心须以分号(;)分隔、MySQL如同多数DBMS一样,不需要在单条SQL语句后加分号。但特定的DBMS可能必须在单条SQL语叶后加上分号。当然,如果愿意可以总是加上分号。事实上,即使不一定需要,但加上分号肯定没有坏处。如果你使用的是mySq1l命令行,必须加上分号来结束SQL语句。

SQL语句和大小写 请注意,SQL语句不区分大小写,因此SELECT与select是相同的.同样,写成Select也没有关系。许多SQL开发人员喜欢对所有SQL关键字使用大写,而对所有列和表名使用小写,这样做使代码更易于阅读和调试

使用空格 在处理SQL语句时,其中所有空格都被忽略。SQL语句可以在一行上给出,也可以分成许多行.多数SQL开发人员认为将SQL语句分成多行更容易阅读和调试。

4.3 检索多个列

要想从一个表中检索多个列,使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

当心逗号在选择多个列时,一定要在列名之间加上逗号,但_
最后一个列名后不加。如果在最后一个列名后加了迎号,将出
现错误。

输入

SELECT name  ,author FROM book_info;

输出

+----------------------+-----------+
| name                 | author    |
+----------------------+-----------+
| JAVAWeb              | b         |
| 1111                 | c         |
| 名称一               | 我的作者  |
| 或者                 | 余华      |
| 名称一               | 安安      |
| 山月不知心底事       | 辛夷坞    |
| 致我们终将逝去的青春 | 辛夷坞    |
| 平凡的世界           | 路遥      |
| aj                   | back back |
| 我是作者             | 中文测试  |
+----------------------+-----------+
4.4 检索所有列

输入 select * from book_info;

分析 如果给定一个通配符(*),则返回表中所有列。列的顺序一般是列在表定义中出现的顺序。但有时候并不是这样的,表的模式的变化(如添加或删除列)可能会导致顺序的变化。

4.5 检索不同的行

使用DISTINCT关键字,返回不同值的列表

输入 SELECT DISTINCT price FROM book_info;

分析 SELECT DISTINCT price告诉MYSQL 只返回不同的price行。

输出

+-------+
| price |
+-------+
|  20.6 |
|    30 |
|    80 |
|  30.5 |
|    35 |
|    40 |
|    58 |
+-------+
4.6 限制结果

SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。

输入 SELECT price FROM book_info LIMIT 5;

分析 此语句使用SELECT语句检索单个列。LIMIT5指示MySQL返回不多于5行

为得出下一个5行,可指定要检索的开始行和行数:

输入 SELECT price FROM book_info LIMIT 5,5;

分析 LIMIT5,5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。

索引从0开始~ 在行数不够时,有多少返回多少!

4.7 使用完全限定的表名

使用完全限定的名字来引用列(同时使用表名和列字)

输入 SELECT book_info.name FROM book_info;

表名也可以是完全限定的:

SELECT book_info.name FROM book.book_info;

第5章 排序检索数据

5.1 排序数据

为了明确地排序用SELECT语句检索出的数据,可使用0RDER BY子句。0RDER BY子句取一个或多个列的名字,据此对输出进行排序

输入 select book_info.name FROM book_info ORDER BY name;

输出

+----------------------+
| name                 |
+----------------------+
| 1111                 |
| aj                   |
| JAVAWeb              |
| 名称一               |
| 名称一               |
| 山月不知心底事       |
| 平凡的世界           |
| 我是作者             |
| 或者                 |
| 致我们终将逝去的青春 |
+----------------------+

ORDER BY使用非检索的列排序数据是完全合法的。

5.2 按多个列排序

输入 SELECT name ,price,author FROM book_info ORDER BY price,author;

输出

+----------------------+-------+-----------+
| name                 | price | author    |
+----------------------+-------+-----------+
| JAVAWeb              |  20.6 | b         |
| 1111                 |    30 | c         |
| 或者                 |    30 | 余华      |
| 名称一               |  30.5 | 安安      |
| 山月不知心底事       |    35 | 辛夷坞    |
| 稳稳当当             |    40 | A         |
| 平凡的世界           |    40 | 路遥      |
| 致我们终将逝去的青春 |    40 | 辛夷坞    |
| 测试                 |  40.5 | 中        |
| aj                   |    58 | back back |
| 我是作者             |    58 | 中文测试  |
| 名称一               |    80 | 我的作者  |
+----------------------+-------+-----------+

上诉例子表示,仅在多个具有相同的price值时才对书本按autor进行排序,如果price列中所有的值都是唯一的,则不会按author排序。

5.3 指定方向排序

数据有升序和降序,为了进行降序排序,必须指定DESC关键字。

输入 SELECT name ,price,author FROM book_info ORDER BY author DESC;

输出

+----------------------+-------+-----------+
| name                 | price | author    |
+----------------------+-------+-----------+
| 致我们终将逝去的青春 |    40 | 辛夷坞    |
| 山月不知心底事       |    35 | 辛夷坞    |
| 平凡的世界           |    40 | 路遥      |
| 名称一               |    80 | 我的作者  |
| 名称一               |  30.5 | 安安      |
| 或者                 |    30 | 余华      |
| 我是作者             |    58 | 中文测试  |
| 测试                 |  40.5 | 中        |
| 1111                 |    30 | c         |
| aj                   |    58 | back back |
| JAVAWeb              |  20.6 | b         |
| 稳稳当当             |    40 | A         |
+----------------------+-------+-----------+

在多列上降序排序 如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

使用ORDER BYLIMIT组合,,能够找出一个列中最高或最低的值。

输入 SELECT price FROM book_info ORDER BY price DESC LIMIT 1;

输出

+-------+
| price |
+-------+
|    80 |
+-------+

分析price DESC保证行是按照由最昂贵到最便宜检索的,而LIMIT1告诉MySQL仅返回一行。

0RDER BY子句的位置“在给出O0RDER BY二句时,应该保证它位于FROM十句之后.如果使用tIMIT,它处须位于0RDER BY之后。使用子句的次序不对将产生错误消息。

第6章 过滤数据

6.1 使用WHERE语句

输入 SELECT name,price,author FROM book_info WHERE price=30;

输出

+------+-------+--------+
| name | price | author |
+------+-------+--------+
| 1111 |    30 | c      |
| 或者 |    30 | 余华   |
+------+-------+--------+

分析

这条语句从book_info 表中检索三个列,但不返回所有行,只返回price值为30的行。

WHERE子句的位置在同时使用ORDER BYWHERE子句时,应该让0RDERBY位于WHERE之后,否则将会产生错误。

6.2 WHERE 语句子句操作符
操作符 说明
= 等于
<>
!=
<
<=
>
>=
BETAEEN
  • 6.2.1 检查单个值

    输入

    SELECT name,price,author FROM book_info WHERE price <=30;

  • 6.2.2 不匹配检查

    输入

    SELECT name,price,author FROM book_info WHERE price <> 40;

    输出

    +----------------+-------+-----------+
    | name           | price | author    |
    +----------------+-------+-----------+
    | JAVAWeb        |  20.6 | b         |
    | 1111           |    30 | c         |
    | 名称一         |    80 | 我的作者  |
    | 或者           |    30 | 余华      |
    | 名称一         |  30.5 | 安安      |
    | 山月不知心底事 |    35 | 辛夷坞    |
    | aj             |    58 | back back |
    | 我是作者       |    58 | 中文测试  |
    | 测试           |  40.5 | 中        |
    +----------------+-------+-----------+
    
  • 6.2.3 范围值检查

    检查范围值,可使用 BETWEEN关键字

    输入

    SELECT name,price,author FROM book_info WHERE price BETWEEN 20 AND 40;

    输出

    +----------------------+-------+--------+
    | name                 | price | author |
    +----------------------+-------+--------+
    | JAVAWeb              |  20.6 | b      |
    | 1111                 |    30 | c      |
    | 或者                 |    30 | 余华   |
    | 名称一               |  30.5 | 安安   |
    | 山月不知心底事       |    35 | 辛夷坞 |
    | 致我们终将逝去的青春 |    40 | 辛夷坞 |
    | 平凡的世界           |    40 | 路遥   |
    | 稳稳当当             |    40 | A      |
    +----------------------+-------+--------+
    

  • 6.2.4 空值检查
输入

SELECT name,price,author FROM book_info WHERE name IS NULL;

第7章 数据过滤

7.1
7.1.1 AND操作符

输入

SELECT name,price,author,bookCount  FROM book_info WHERE bookCount < 40 AND price <50;

输出

+----------------------+-------+--------+-----------+
| name                 | price | author | bookCount |
+----------------------+-------+--------+-----------+
| JAVAWeb              |  20.6 | b      |        10 |
| 名称一               |  30.5 | 安安   |        20 |
| DD                   |    35 | 辛夷坞 |        10 |
| 致我们终将逝去的青春 |    40 | 辛夷坞 |         0 |
| 平凡的世界           |    40 | 路遥   |         0 |
+----------------------+-------+--------+-----------+
7.2 IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。

输入

SELECT name,author FROM book_info WHERE price in (30,40,58) ORDER BY name;

输出

+----------------------+-----------+
| name                 | author    |
+----------------------+-----------+
| 1111                 | c         |
| aj                   | back back |
| 平凡的世界           | 路遥      |
| 我是作者             | 中文测试  |
| 或者                 | 余华      |
| 稳稳当当             | A         |
| 致我们终将逝去的青春 | 辛夷坞    |
+----------------------+-----------+

分析

此SELECT语句价格为30、40、58的所有书本信息。IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。(IN并不是数学中的区间概念,如30、40、58仅仅是30,40,58)

INOR功能相同,如下

输入

SELECT name,author FROM book_info WHERE price=30 OR price=40 OR price=58  ORDER BY name;

IN操作符的优点:

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符一般比0R操作符清单执行更快。
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
7.3 NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所
跟的任何条件。

输入

 SELECT name,author FROM book_info WHERE price NOT IN (30,40,58) ORDER BY name;

输出

+---------+----------+
| name    | author   |
+---------+----------+
| DD      | 辛夷坞   |
| JAVAWeb | b        |
| 名称一  | 我的作者 |
| 名称一  | 安安     |
| 测试    | 中       |
+---------+----------+

第8章 用通配符进行过滤

8.1 LIKE操作符
8.1.1 百分号(%)通配符

最常使用的通配符是百分号(%)。在搜索中,%表示任何字符出现任意次数。例如,为了找出所有以词起头的产品,可使用以下SELECT语句:

输入

 SELECT * FROM book_info WHERE name LIKE '名%';

输出

+----+--------+-------+-----------+-----------+
| id | name   | price | bookCount | author    |
+----+--------+-------+-----------+-----------+
|  3 | 名称二 |    80 |        77 | 我的作者  |
|  5 | 名称一 |  30.5 |        20 | 安安      |
|  9 | 名称三 |    58 |        60 | back back |
+----+--------+-------+-----------+-----------+

通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端:

输入

SELECT * FROM book_info WHERE name LIKE '%的%';

输出

+----+----------------------+-------+-----------+--------+
| id | name                 | price | bookCount | author |
+----+----------------------+-------+-----------+--------+
|  7 | 致我们终将逝去的青春 |    40 |         0 | 辛夷坞 |
|  8 | 平凡的世界           |    40 |         0 | 路遥   |
+----+----------------------+-------+-----------+--------+
8.1.2 下划线(_)通配符

另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

8.2 使用通配符的技巧
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该
    使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用
    在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起
    来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

第9章 用正则表达式进行搜索

9.1 正则表达式介绍
9.2 使用MySql正则表达式
9.2.1 基本字符匹配
9.2.2 进行OR匹配

输入

 SELECT * FROM book_info WHERE bookCount REGEXP '20|60|50' ORDER BY name;

输出

+----+----------+-------+-----------+-----------+
| id | name     | price | bookCount | author    |
+----+----------+-------+-----------+-----------+
|  2 | 1111     |    30 |        50 | c         |
|  5 | 名称一   |  30.5 |        20 | 安安      |
|  9 | 名称三   |    58 |        60 | back back |
| 14 | 我是作者 |    58 |        60 | 中文测试  |
+----+----------+-------+-----------+-----------+
9.2.3 匹配几个字符之一
9.2.4 匹配范围

输入

 SELECT * FROM book_info WHERE name REGEXP '[1-6]书名' ORDER BY name;

输出

+----+---------+-------+-----------+--------+
| id | name    | price | bookCount | author |
+----+---------+-------+-----------+--------+
| 18 | 2书名字 |    50 |       200 | 作者B  |
| 19 | 3书名   |    20 |        63 | 作者C  |
| 21 | 5书名   |    20 |        60 | 作者4  |
+----+---------+-------+-----------+--------+
9.2.5 匹配特色字符

例如想找出包含.字符的值,该怎样搜索

输入

 SELECT * FROM book_info WHERE name REGEXP '\\.' ORDER BY name;

注意:使用.匹配需要使用两个\进行转义;

9.2.6 匹配字符类
说明
[alnum:] 任意孛母和数子(同[a-ZA-Z0-9])

[:alpha:] 任意字符(同[a-zA-Z])

[:blank:] 空格和制表(同[V\t]

[:cntrl:] ASCII控制字符(ASCII0到31和127)

[:digit:] 任意数字(同[0-9])

[:graph:1] 与[:print:]相同,但不包括空格

[:Lower:] 任意小写字母(同[a-z])

[:print:] 任意可打印字符

[:punct:] 既不在[:alnum:]又不在[:cntr1l:]中的任意字符
9.2.7 匹配多个实例
9.2.8 定位符

第10章 创建计算字段

10.1 计算字段
10.2 拼接字段

在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。

输入

 SELECT Concat(name,'(',price,')') FROM book_info ;

输出

+----------------------------+
| Concat(name,'(',price,')') |
+----------------------------+
| JAVAWeb(20.6)              |
| 1111(30)                   |
| 名称二(80)                 |
| 或者(30)                   |
| 名称一(30.5)               |
| DD(35)                     |
| 致我们终将逝去的青春(40)   |
| 平凡的世界(40)             |
| 名称三(58)                 |
| 我是作者(58)               |
| 稳稳当当(40)               |
| 测试(40.5)                 |
| 1 书名(30)                 |
| 2书名字(50)                |
| 3书名(20)                  |
| 9书名(37)                  |
| 5书名(20)                  |
| 书.名(15)                  |
+----------------------------+

Rtrim()可以删除数据右侧多余的空格

输入

SELECT Concat(Rtrim(name),'(',Rtrim(price),')') FROM book_info ;
10.3 执行算术计算

total_price 包含单价和数量乘积。

输入

 SELECT name,price ,bookCount ,price*bookCount AS total_price FROM book_info;

输出

+----------------------+-------+-----------+-------------+
| name                 | price | bookCount | total_price |
+----------------------+-------+-----------+-------------+
| JAVAWeb              |  20.6 |        10 |         206 |
| 1111                 |    30 |        50 |        1500 |
| 名称二               |    80 |        77 |        6160 |
| 或者                 |    30 |        40 |        1200 |
| 名称一               |  30.5 |        20 |         610 |
| DD                   |    35 |        10 |         350 |
| 致我们终将逝去的青春 |    40 |         0 |           0 |
| 平凡的世界           |    40 |         0 |           0 |
| 名称三               |    58 |        60 |        3480 |
| 我是作者             |    58 |        60 |        3480 |
| 稳稳当当             |    40 |       100 |        4000 |
| 测试                 |  40.5 |       100 |        4050 |
| 1 书名               |    30 |        60 |        1800 |
| 2书名字              |    50 |       200 |       10000 |
| 3书名                |    20 |        63 |        1260 |
| 9书名                |    37 |        50 |        1850 |
| 5书名                |    20 |        60 |        1200 |
| 书.名                |    15 |        66 |         990 |
+----------------------+-------+-----------+-------------+

你可能感兴趣的:(MySql___(5) MySQL 必知必会)