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 |
+----------------------+-------+-----------+-------------+
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容