目錄
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';