目錄html
MySQL版本 8.0.15mysql
# root 用戶登陸 mysql -u root -p; # 添加用戶 use mysql; create user test@localhost identified by 'test123'; # 授予用戶所有權限 GRANT ALL on *.* to 'test'@'localhost' WITH GRANT OPTION;
CREATE DATABASE db_example;
use db_example;
drop database <數據庫名>;
注:SQL 不區分大小寫,建議關鍵詞大寫增長可讀性;SQL 是 0-base 的語句sql
參考 https://www.yiibai.com/mysql/how-to-load-sample-database-into-mysql-database-server.html數據庫
SELECT column0,column1,...clomunn FROM table_x;
注: SELECT * FROM tabel 能夠查詢全部列, * 爲通配符yii
SELECT DISTINCT vend_id FROM Products;
DISTINCT 列名
只返回 vend_id 這一列不一樣的值ide
SELECT columns FROM table LIMIT N;
從第M行開始的N行數據, LIMIT N offset M函數
MySQL 和 MariaDB 支持簡化版本的 LIMIT M,N 語句,逗號前面對應 OFFSET, 逗號後面對應 LIMIT學習
SELECT columns FROM table LIMIT N OFFSET M;
SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49;
SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;
BETWEEN 須要AND 鏈接上下限;spa
空值檢查: IS NULL 語句3d
IN 操做符: 指定條件範圍,() 內的被篩選出來,與 OR 有一樣的做用
NOT 操做符: 否認後面的條件
LIKE 謂詞
% 通配符:表示任何字符出現任何次數
_ 通配符: 匹配單個字符
[] 通配符: 指定字符集匹配一個字符
SELECT prod_name, prod_price FROM Products WHERE vend_id IN ( 'DLL01', 'BRS01' )
示例: 統計 prod_price 的平均值保存爲 avg_price
SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM Products;
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
ORDER BY 後面能夠是非檢索的列,能夠是其餘列; ORDER BY 應該保證是 SELECT 語句中的最後一條子句(也必須放在 ); 使用選擇的列(這裏的 prod_id, prod_price, prod_name)排序能夠用它們的順序進行排列如 ORDER BY 2,3
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;
時間函數: 跟具體的DBMS 有關 SQL 數值函數 ![image](http://media.alearner.cn/PictureRepo/Note/blog20190227SQLFuncNum.PNG) SQL字符串函數 ![image](http://media.alearner.cn/PictureRepo/Note/blog20190227SQLFuncString.PNG) 另外 MySQL 還提供了豐富的函數,[查表](http://www.runoob.com/mysql/mysql-functions.html)
-- 建立表 CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR(255) ) -- 插入數據 INSERT INTO email VALUES('1','a@b.com'); INSERT INTO email VALUES('2','c@d.com'); INSERT INTO email VALUES('3','a@b.com'); -- 查詢 SELECT Email FROM email GROUP BY Email HAVING COUNT(*) > 1
結果:
+-----------------+------------+------------+--------------+---------------+ | name | continent | area | population | gdp | +-----------------+------------+------------+--------------+---------------+ | Afghanistan | Asia | 652230 | 25500100 | 20343000 | | Albania | Europe | 28748 | 2831741 | 12960000 | | Algeria | Africa | 2381741 | 37100000 | 188681000 | | Andorra | Europe | 468 | 78115 | 3712000 | | Angola | Africa | 1246700 | 20609294 | 100990000 | +-----------------+------------+------------+--------------+---------------+
若是一個國家的面積超過300萬平方千米,或者(人口超過2500萬而且gdp超過2000萬),那麼這個國家就是大國家。
編寫一個SQL查詢,輸出表中全部大國家的名稱、人口和麪積。
例如,根據上表,咱們應該輸出:
+--------------+-------------+--------------+ | name | population | area | +--------------+-------------+--------------+ | Afghanistan | 25500100 | 652230 | | Algeria | 37100000 | 2381741 | +--------------+-------------+--------------+
CREATE TABLE World ( name VARCHAR(50) NOT NULL, continent VARCHAR(50) NOT NULL, area INT NOT NULL, population INT NOT NULL, gdp INT NOT NULL ); -- 插入數據 INSERT INTO World VALUES( 'Afghanistan', 'Asia',652230,25500100,20343000); INSERT INTO World VALUES( 'Albania', 'Europe' ,28748,2831741,12960000); INSERT INTO World VALUES( 'Algeria', 'Africa' ,2381741,37100000,188681000); INSERT INTO World VALUES( 'Andorra' , 'Europe' ,468,78115,3712000); INSERT INTO World VALUES( 'Angola' , 'Africa' ,1246700,20609294,100990000); -- 查詢 SELECT name,population,area FROM world WHERE area>3000000 OR (population > 2500000 AND gdp > 20000000)
結果:
今天好好學習了一下 SQL 的查詢、篩選、分組、排序和函數, 總的來講比較簡單。 文中主要圖表和代碼參考 《SQL 必知必會》,人民郵電出版社出版,[美]Ben Forta 著,鐘鳴,劉曉霞譯。