詳解MySQL數據庫常用sql語句操作增、刪、改、查,註釋,模糊查詢,多表聯動,正則表達式等

目錄

1.sql語句中的單行註釋

2.多行註釋

3. 新建數據庫

4.刪除數據庫

5. 創建表

6.MySQL 刪除數據表

7.MySQL 插入數據

8.MySQL 查詢數據

9.MySQL UPDATE 更新記錄

10.MySQL DELETE 語句刪除記錄

11.MySQL LIKE 子句 模糊查詢

12.MySQL UNION 操作符  聯合查詢

13.MySQL 排序

14.MySQL GROUP BY 語句

15.MySQL 連接的使用  多表聯動查詢

16.MySQL NULL值處理

17. MySQL中使用 REGEXP 操作符來進行正則表達式匹配。


兩個--後接一個空格

-- 測試註釋

2.多行註釋

/*
 多行註釋
 gang
*/

3. 新建數據庫

CREATE DATABASE 數據庫名;

4.刪除數據庫

DROP DATABASE <數據庫名>;

5. 創建表

語法: 

CREATE TABLE table_name (column_name column_type);
CREATE TABLE `address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用戶表的用戶ID',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '收貨人名稱',
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  `sure_name` varchar(255) DEFAULT NULL,
  `postal_code` varchar(255) DEFAULT NULL COMMENT '郵政編碼',
  `country_code` varchar(10) DEFAULT NULL,
  `tel` varchar(30) NOT NULL DEFAULT '' COMMENT '手機號碼',
  `province` varchar(255) NOT NULL COMMENT '行政區域表的省ID',
  `city` varchar(255) NOT NULL COMMENT '行政區域表的市ID',
  `county` varchar(255) NOT NULL COMMENT '行政區域表的區縣ID',
  `address_detail` varchar(255) NOT NULL DEFAULT '' COMMENT '詳細收貨地址',
  `area_code` char(6) DEFAULT NULL COMMENT '地區編碼',
  `is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否默認地址',
  `add_time` datetime DEFAULT NULL COMMENT '創建時間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時間',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '邏輯刪除',
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='收貨地址表';

 上面案例說明:

  • 如果你不想字段爲 NULL 可以設置字段的屬性爲 NOT NULL, 在操作數據庫時如果輸入該字段的數據爲NULL ,就會報錯。
  • AUTO_INCREMENT定義列爲自增的屬性,一般用於主鍵,數值會自動加1。
  • PRIMARY KEY關鍵字用於定義列爲主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
  • ENGINE 設置存儲引擎,CHARSET 設置編碼。
  • COMMENT 設置備註
  • int  varchar datetime tinyint char是數據庫數據類型

6.MySQL 刪除數據表

語法:  

DROP TABLE table_name ;
-- 刪除
DROP TABLE `admin`;
-- 下邊這個是如果存在這個表,就刪除
DROP TABLE IF EXISTS `address`;  

7.MySQL 插入數據

語法: 

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
INSERT INTO `runoob_tbl` VALUES ('1', '學習 PHP', '菜鳥教程', '2017-04-12'), ('2', '學習 MySQL', '菜鳥教程', '2017-04-12'), ('3', '學習 Java', 'RUNOOB.COM', '2015-05-01'), ('4', '學習 Python', 'RUNOOB.COM', '2016-03-06'), ('5', '學習 C', 'FK', '2017-04-05');

8.MySQL 查詢數據

以下爲在MySQL數據庫中查詢數據通用的 SELECT 語法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
  • SELECT 命令可以讀取一條或者多條記錄。
  • 你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據
  • 你可以使用 WHERE 語句來包含任何條件。
  • 你可以使用 LIMIT 屬性來設定返回的記錄數。
  • 你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量爲0。
- 查詢 
-- SELECT * FROM runoob_tbl;
-- SELECT * FROM runoob_tbl WHERE runoob_author='as';
-- MySQL 的 WHERE 子句的字符串比較是不區分大小寫的。 你可以使用 BINARY 關鍵字來設定 WHERE 子句的字符串比較是區分大小寫的
-- SELECT * from runoob_tbl WHERE BINARY runoob_author='AS';

給數據做分頁的時候 offset爲limit的倍數  假設每頁顯示數量爲5, 第一頁數據則是1-5 第二頁就是吧offset 設置成5依次類推寫個函數即可。

9.MySQL UPDATE 更新記錄

以下是 UPDATE 命令修改 MySQL 數據表數據的通用 SQL 語法:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
  • 你可以同時更新一個或多個字段。
  • 你可以在 WHERE 子句中指定任何條件。
  • 你可以在一個單獨表中同時更新數據。
-- 更新 
UPDATE runoob_tbl SET runoob_title='學習BUKEKU' WHERE runoob_id=2;
-- 這個語句的含義 是 runoob_id =2的時候我改這個runoob_title爲'學習BUKEKU'

10.MySQL DELETE 語句刪除記錄

以下是 SQL DELETE 語句從 MySQL 數據表中刪除數據的通用語法:

DELETE FROM table_name [WHERE Clause]
  • 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除

  • 你可以在 WHERE 子句中指定任何條件
  • 您可以在單個表中一次性刪除記錄。
-- 刪除
DELETE FROM runoob_tbl WHERE runoob_id=4;

11.MySQL LIKE 子句 模糊查詢

以下是 SQL SELECT 語句使用 LIKE 子句從數據表中讀取數據的通用語法:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • 你可以在 WHERE 子句中指定任何條件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等號 =。
  • LIKE 通常與 % 一同使用,類似於一個元字符的搜索。
  • 你可以使用 AND 或者 OR 指定一個或多個條件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句來指定條件。
/*
like 匹配/模糊匹配,會與 % 和 _ 結合使用。

'%a'     //以a結尾的數據
'a%'     //以a開頭的數據
'%a%'    //含有a的數據
'_a_'    //三位且中間字母是a的
'_a'     //兩位且結尾字母是a的
'a_'     //兩位且開頭字母是a的
*/

SELECT * from runoob_tbl  WHERE runoob_author LIKE 'a%';
-- 找到以a開頭的。

12.MySQL UNION 操作符  聯合查詢

MySQL UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的數據。

語法

MySQL UNION 操作符語法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

參數

  • expression1, expression2, ... expression_n: 要檢索的列。

  • tables: 要檢索的數據表。

  • WHERE conditions: 可選, 檢索條件。

  • DISTINCT: 可選,刪除結果集中重複的數據。默認情況下 UNION 操作符已經刪除了重複數據,所以 DISTINCT 修飾符對結果沒啥影響。

  • ALL: 可選,返回所有結果集,包含重複數據。

user表: 

user2表: 

SELECT name,age FROM user WHERE age>35
UNION
SELECT name,age FROM user2 WHERE age>40
ORDER BY age;

結果: 

13.MySQL 排序

MySQL 的 ORDER BY 子句來設定你想按哪個字段哪種方式來進行排序,再返回搜索結果。

以下是 SQL SELECT 語句使用 ORDER BY 子句將查詢數據排序後再返回數據:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默認 ASC]], [field2...] [ASC [DESC][默認 ASC]]
  • 你可以使用任何字段來作爲排序的條件,從而返回排序後的查詢結果。
  • 你可以設定多個字段來排序。
  • 你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升序排列。
  • 你可以添加 WHERE...LIKE 子句來設置條件。
-- 排序  ASC升序 DESC 降序
SELECT * FROM user WHERE age>19 ORDER BY age DESC;

14.MySQL GROUP BY 語句

現將下方的sql導入到自己數據庫

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
  `id` int(11) NOT NULL,
  `name` char(10) NOT NULL DEFAULT '',
  `date` datetime NOT NULL,
  `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登錄次數',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小麗', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

GROUP BY 語法

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
 SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

COUNT數量, SUM總和

/*
我們可以使用 coalesce 來設置一個可以取代 NUll 的名稱,coalesce 語法:

select coalesce(a,b,c);
參數說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都爲null ,則返回爲null(沒意義)。
*/
SELECT coalesce(name, '總數'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
/*
+--------------------------+--------------+
| coalesce(name, '總數') | singin_count |
+--------------------------+--------------+
| 小麗                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 總數                   |           16 |
+--------------------------+--------------+
*/

15.MySQL 連接的使用  聯合多表查詢

MySQL 的 JOIN 在兩個或多個表中查詢數據。

你可以在 SELECT, UPDATE 和 DELETE 語句中使用 Mysql 的 JOIN 來聯合多表查詢。

JOIN 按照功能大致分爲如下三類:

  • INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。
  • LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
  • RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。

先執行下邊sql文件生成2個表

/*
 Navicat MySQL Data Transfer

 Source Server         : 127.0.0.1
 Source Server Version : 50621
 Source Host           : localhost
 Source Database       : RUNOOB

 Target Server Version : 50621
 File Encoding         : utf-8

 Date: 04/13/2017 14:25:12 PM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `runoob_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `runoob_tbl`;
CREATE TABLE `runoob_tbl` (
  `runoob_id` int(11) NOT NULL AUTO_INCREMENT,
  `runoob_title` varchar(100) NOT NULL,
  `runoob_author` varchar(40) NOT NULL,
  `submission_date` date DEFAULT NULL,
  PRIMARY KEY (`runoob_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `runoob_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `runoob_tbl` VALUES ('1', '學習 PHP', '菜鳥教程', '2017-04-12'), ('2', '學習 MySQL', '菜鳥教程', '2017-04-12'), ('3', '學習 Java', 'RUNOOB.COM', '2015-05-01'), ('4', '學習 Python', 'RUNOOB.COM', '2016-03-06'), ('5', '學習 C', 'FK', '2017-04-05');
COMMIT;

-- ----------------------------
--  Table structure for `tcount_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `tcount_tbl`;
CREATE TABLE `tcount_tbl` (
  `runoob_author` varchar(255) NOT NULL DEFAULT '',
  `runoob_count` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `tcount_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `tcount_tbl` VALUES ('菜鳥教程', '10'), ('RUNOOB.COM ', '20'), ('Google', '22');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

兩個表的結構

runoob_tbl

tcount_tbl

JOIN 取交集

執行

SELECT a.runoob_id,a.runoob_title, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

結果

LEFT JOIN

取左表的全部,和右邊對應不上的爲null

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鳥教程    | 10             |
| 2           | 菜鳥教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+

RIGHT JOIN

會讀取右表的全部,左表沒有的標null

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鳥教程    | 10             |
| 2           | 菜鳥教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+

16.MySQL NULL值處理

以下兩條語句是不生效的

SELECT * FROM runoob_test_tbl WHERE runoob_count = NULL;
SELECT * FROM runoob_test_tbl WHERE runoob_count != NULL;

爲了處理這種情況,MySQL提供了三大運算符:

  • IS NULL: 當列的值是 NULL,此運算符返回 true。
  • IS NOT NULL: 當列的值不爲 NULL, 運算符返回 true。
  • <=>: 比較操作符(不同於 = 運算符),當比較的的兩個值相等或者都爲 NULL 時返回 true。

要這樣子寫

SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;
SELECT * FROM runoob_test_tbl WHERE runoob_count IS NOT NULL;

17. MySQL中使用 REGEXP 操作符來進行正則表達式匹配。

-- 正則 關鍵字 REGEXP
SELECT * FROM runoob_new WHERE runoob_author REGEXP '^R';

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章