sql number轉varchar_MySQL 指南之 SQL 語句基礎

個人所有文章整理在此篇,將陸續更新收錄:知無涯,行者之路莫言終(我的編程之路)


7515467bd79c4ec2bbff34369c834e6d.png

零、結構化查詢語言:SQL(Structured Query Language)

DDL 數據定義語言 管理庫,表

DML 數據操作語言 增刪改查

DCL 數據控制語言 數據控制,權限訪問等


準備活動:創建庫和表

CREATE DATABASE datatype;

USE datatype;

CREATE TABLE type_number(

type CHAR(12),

byte TINYINT UNSIGNED,

range_singed VARCHAR(20),

range_unsinged VARCHAR(20),

info VARCHAR(40)

);


目前狀態:

mysql> SHOW DATABASES;

+--------------------+

| Database |

+--------------------+

| datatype |

| information_schema |

| mycode |

| mysql |

| performance_schema |

| seckill |

+--------------------+

mysql> USE datatype;

Database changed

mysql> SHOW TABLES;

+--------------------+

| Tables_in_datatype |

+--------------------+

| type_number |

+--------------------+

mysql> DESC type_number;

+----------------+---------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------+---------------------+------+-----+---------+-------+

| type | char(12) | YES | | NULL | |

| byte | tinyint(3) unsigned | YES | | NULL | |

| range_singed | varchar(20) | YES | | NULL | |

| range_unsinged | varchar(20) | YES | | NULL | |

| info | varchar(40) | YES | | NULL | |

+----------------+---------------------+------+-----+---------+-------+


一、DML 數據庫記錄操作?LEVEL1

LEVEL 1 先簡單掌握一下下面的用法

adb20118a62e9e2ba41482de6ea44a1a.png


1、記錄的插入操作

INSERT INTO(屬性,...)VALUES(值,...),...;

|-- 插入一條數據 INSERT INTO (屬性,...) VALUES (值,...);

INSERT INTO

type_number(type,byte,range_singed,range_unsinged,info)

VALUES

('TINYINT',1,'-2? ~ 2?-1','0 ~ 2?-1','很小整數');

|-- 查詢所有 SELECT * FROM ;

mysql> SELECT * FROM type_number;

+---------+------+----------------+----------------+--------------+

| type | byte | range_singed | range_unsinged | info |

+---------+------+----------------+----------------+--------------+

| TINYINT | 1 | -2? ~ 2?-1 | 0 ~ 2?-1 | 很小整數 |

+---------+------+----------------+----------------+--------------+

|-- 你也可以一次,插入多條數據

INSERT INTO

type_number(type,byte,range_singed,range_unsinged,info)

VALUES

('TINYINT',1,'-2? ~ 2?-1','0 ~ 2?-1','很小整數'),

('SMALLINT',2,'-21? ~ 21?-1','0 ~ 21?-1','小整數'),

('MEDIUMINT',3,'-22? ~ 22?-1','0 ~ 22?-1','中等整數'),

('INT',4,'-232 ~ 232-1','0 ~ 232-1','標準整數'),

('BIGINT',8,'-2?? ~ 2??-1','0 ~ 2??-1','大整數');

mysql> SELECT * FROM type_number;

+-----------+------+----------------------+----------------+--------------+

| type | byte | range_singed | range_unsinged | info |

+-----------+------+----------------------+----------------+--------------+

| TINYINT | 1 | -2? ~ 2?-1 | 0 ~ 2?-1 | 很小整數 |

| TINYINT | 1 | -2? ~ 2?-1 | 0 ~ 2?-1 | 很小整數 |

| SMALLINT | 2 | -21? ~ 21?-1 | 0 ~ 21?-1 | 小整數 |

| MEDIUMINT | 3 | -22? ~ 22?-1 | 0 ~ 22?-1 | 中等整數 |

| INT | 4 | -232 ~ 232-1 | 0 ~ 232-1 | 標準整數 |

| BIGINT | 8 | -2?? ~ 2??-1 | 0 ~ 2??-1 | 大整數 |

+-----------+------+----------------------+----------------+--------------+

2、記錄的更新操作

UPDATE SET 屬性=值,...WHERE 條件;

UPDATE type_number

SET

info='微型整數'

WHERE type = 'TINYINT';

mysql> SELECT * FROM type_number;

+-----------+------+----------------------+----------------+--------------+

| type | byte | range_singed | range_unsinged | info |

+-----------+------+----------------------+----------------+--------------+

| TINYINT | 1 | -2? ~ 2?-1 | 0 ~ 2?-1 | 微型整數 |

| TINYINT | 1 | -2? ~ 2?-1 | 0 ~ 2?-1 | 微型整數 |

| SMALLINT | 2 | -21? ~ 21?-1 | 0 ~ 21?-1 | 小整數 |

| MEDIUMINT | 3 | -22? ~ 22?-1 | 0 ~ 22?-1 | 中等整數 |

| INT | 4 | -232 ~ 232-1 | 0 ~ 232-1 | 標準整數 |

| BIGINT | 8 | -2?? ~ 2??-1 | 0 ~ 2??-1 | 大整數 |

+-----------+------+----------------------+----------------+--------------+


3.記錄的刪除操作

DELETE FROM WHERE 條件;

|--- 刪除操作

DELETE FROM type_number

WHERE type = 'TINYINT';

mysql> SELECT * FROM type_number;

+-----------+------+----------------------+----------------+--------------+

| type | byte | range_singed | range_unsinged | info |

+-----------+------+----------------------+----------------+--------------+

| SMALLINT | 2 | -21? ~ 21?-1 | 0 ~ 21?-1 | 小整數 |

| MEDIUMINT | 3 | -22? ~ 22?-1 | 0 ~ 22?-1 | 中等整數 |

| INT | 4 | -232 ~ 232-1 | 0 ~ 232-1 | 標準整數 |

| BIGINT | 8 | -2?? ~ 2??-1 | 0 ~ 2??-1 | 大整數 |

+-----------+------+----------------------+----------------+--------------+


4.記錄的查詢操作

SELECT 屬性,...FROM WHERE 條件;

mysql>

SELECT

type,range_unsinged

FROM type_number

WHERE byte>=4;

+--------+----------------+

| type | range_unsinged |

+--------+----------------+

| INT | 0 ~ 232-1 |

| BIGINT | 0 ~ 2??-1 |

+--------+----------------+


二、圖片表 pic?(LEVER2)

這個是用來記錄圖片信息的表,數據準備過程詳見番外篇:[番外]-練習MySQL沒素材?來一波字符串操作

813022f71aa1c4dc91e888a58061bde7.png

1.建表語句

CREATE TABLE pic(

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

pic_path VARCHAR(120) NOT NULL,

pic_length INT UNSIGNED DEFAULT 0,

pic_mime TINYINT UNSIGNED,

pic_width SMALLINT UNSIGNED,

pic_height SMALLINT UNSIGNED

);

|--- id 為主鍵 自增長

|--- pic_path表示名字,不定長度 ,給個VARCHAR 120 吧,差不多夠用吧

|--- 圖片文件大小不會非常大,給個INT足夠了 , 給個默認值 0

|--- pic_mime 0 表示 image/png 1表示 image/jpeg 給個最小的

|--- pic_width和pic_height也不會非常大,無符號SMALLINT足夠


2.查詢操作?AS?的作用

|-- 查詢高大于1200像素的記錄,使用AS 來 臨時更改查詢輸出的屬性名(不會改變實際記錄)

mysql>

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height>1200;

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| 30000X20000.jpg | 30000 | 20000 |

| 3000X2000.jpg | 3000 | 2000 |

| ecNKedygCmSjTWWF.jpg | 700 | 1352 |

| gtQiXnRfkvvTLinw.jpg | 2880 | 2025 |

| HXqqASHJETSlvpnc.jpg | 3600 | 2400 |

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

| screen.png | 1080 | 1920 |

| XQWGrglfjGVuJfzJ.jpg | 1200 | 1696 |

+----------------------+--------+--------+


3.查詢是屬性可參與運算

|-- CONCAT函數用于連接字符串 注意:\需要轉義

mysql>

SELECT

CONCAT('E:\\SpringBootFiles\\imgs\\',pic_path) AS 絕對路徑,

pic_width * pic_height AS '像素點個數'

FROM pic

WHERE pic_height>1200;

+----------------------------------------------+-----------------+

| 絕對路徑 | 像素點個數 |

+----------------------------------------------+-----------------+

| E:\SpringBootFiles\imgs\30000X20000.jpg | 600000000 |

| E:\SpringBootFiles\imgs\3000X2000.jpg | 6000000 |

| E:\SpringBootFiles\imgs\ecNKedygCmSjTWWF.jpg | 946400 |

| E:\SpringBootFiles\imgs\gtQiXnRfkvvTLinw.jpg | 5832000 |

| E:\SpringBootFiles\imgs\HXqqASHJETSlvpnc.jpg | 8640000 |

| E:\SpringBootFiles\imgs\ndbMXlwKuCpiiVqC.jpg | 3857868 |

| E:\SpringBootFiles\imgs\screen.png | 2073600 |

| E:\SpringBootFiles\imgs\XQWGrglfjGVuJfzJ.jpg | 2035200 |

+----------------------------------------------+-----------------+


4.?WHERE條件的千變萬化

99037a2e51e64490f8a8bd9f19e8537f.png

4.1: 條件??--?AND?和?&&

條件必須全部滿足

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height>1200 AND

pic_width > 1500;

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| 30000X20000.jpg | 30000 | 20000 |

| 3000X2000.jpg | 3000 | 2000 |

| gtQiXnRfkvvTLinw.jpg | 2880 | 2025 |

| HXqqASHJETSlvpnc.jpg | 3600 | 2400 |

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

+----------------------+--------+--------+

|--- AND 效果等于 &&

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height>1200 &&

pic_width > 1500;


4.2: 條件??--?OR?和?||

條件滿足一個即可

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height>1200 OR

pic_width > 1500;

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| 30000X20000.jpg | 30000 | 20000 |

| 3000X2000.jpg | 3000 | 2000 |

| ecNKedygCmSjTWWF.jpg | 700 | 1352 |

| gtQiXnRfkvvTLinw.jpg | 2880 | 2025 |

| HXqqASHJETSlvpnc.jpg | 3600 | 2400 |

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

| screen.png | 1080 | 1920 |

| XQWGrglfjGVuJfzJ.jpg | 1200 | 1696 |

+----------------------+--------+--------+

|--- OR 效果等于 ||

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height>1200 ||

pic_width > 1500;


4.3: 條件??--?NOT?和?!

對條件取反

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE NOT pic_height < 1200;

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| 30000X20000.jpg | 30000 | 20000 |

| 3000X2000.jpg | 3000 | 2000 |

| ecNKedygCmSjTWWF.jpg | 700 | 1352 |

| gtQiXnRfkvvTLinw.jpg | 2880 | 2025 |

| HXqqASHJETSlvpnc.jpg | 3600 | 2400 |

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

| screen.png | 1080 | 1920 |

| XQWGrglfjGVuJfzJ.jpg | 1200 | 1696 |

+----------------------+--------+--------+


4.4: 散點匹配?IN(v1,v2,v3,...)

符合 v1,v2,v3,...之一可匹配

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height IN (1696,2268);

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

| XQWGrglfjGVuJfzJ.jpg | 1200 | 1696 |

+----------------------+--------+--------+


4.5: 區間匹配?BETWEEN v1 AND v2

v1,v2 之間可匹配

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_height BETWEEN 1696 AND 2268;

+----------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------+--------+--------+

| 3000X2000.jpg | 3000 | 2000 |

| gtQiXnRfkvvTLinw.jpg | 2880 | 2025 |

| ndbMXlwKuCpiiVqC.jpg | 1701 | 2268 |

| screen.png | 1080 | 1920 |

| XQWGrglfjGVuJfzJ.jpg | 1200 | 1696 |

+----------------------+--------+--------+


4.6:模糊查詢:?LIKE

'%' 匹配任意多個字符,'_' 匹配任意單個字符

mysql>

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_path LIKE 'androi%';

+----------------------------------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+----------------------------------------------+--------+--------+

| android\008525ebc2b7d434070e74c00841a30f.png | 544 | 544 |

| android\054d98e2d96dc42d9b2b036126fccf49.png | 544 | 544 |

| android\05baf2d03651d1110d7a403f14aee877.png | 544 | 544 |

| android\0655e07d6717847489cd222c9c9e0b1d.png | 500 | 500 |

| android\079c4cb46c95b2365b5bc5150e7d5213.png | 544 | 544 |

| android\07a4dc9b4b207cb420a71cbf941ad45a.png | 544 | 544 |

| android\07abb7972a5638b53afa3b5eb98b19c1.png | 500 | 500 |

......

mysql>

SELECT

pic_path AS 路徑 ,

pic_width AS '寬/px',

pic_height AS '高/px'

FROM pic

WHERE pic_path LIKE 'p_em%';

+--------------------------------------------+--------+--------+

| 路徑 | 寬/px | 高/px |

+--------------------------------------------+--------+--------+

| poem\世界·綻放.jpg | 1148 | 712 |

| poem\我愛你,是火山巖的緘默.jpg | 690 | 397 |

| poem\枝·你是樹的狂舞.jpg | 500 | 333 |

| poem\海與鹿王.jpg | 799 | 499 |

| poem\游夢人·詩的誕生.jpg | 800 | 444 |

| poem\珊瑚墓地.jpg | 1104 | 719 |

+--------------------------------------------+--------+--------+


4.7:比較符號?=!=<><=>=

小學生都知道的,就不廢話了,查看一下小于 10Kb 的圖片

mysql>

SELECT

pic_path AS 路徑 ,

pic_length AS '大小/byte'

FROM pic

WHERE pic_length < 10*1024;

+----------------------------------------------+-------------+

| 路徑 | 大小/byte |

+----------------------------------------------+-------------+

| 30X20.jpg | 10158 |

| android\613f2b8f0eaa8f63bedce9781527c9ab.png | 4001 |

| android\94b5c41232f9761403890c09c2b1aae3.png | 4001 |

| android\d3fd676f224f0734beb48d0c0d2f4e66.png | 4001 |

| udp發送與接收消息_控制臺.png | 9184 |

+----------------------------------------------+-------------+


5.?GROUP BY分組查詢

會先排序,再列出

|--- GROUP BY

SELECT

pic_mime AS "類型",

avg(pic_length) AS '平均大小/byte' ,

count(pic_length) AS '總數量/個' ,

min(pic_length) AS '最小值/byte' ,

max(pic_length) AS '最大值/byte' ,

sum(pic_length) AS '總和/byte'

FROM pic

GROUP BY pic_mime;

+--------+-------------------+---------------+----------------+----------------+-------------+

| 類型 | 平均大小/byte | 總數量/個 | 最小值/byte | 最大值/byte | 總和/byte |

+--------+-------------------+---------------+----------------+----------------+-------------+

| 0 | 141518.8734 | 229 | 4001 | 829338 | 32407822 |

| 1 | 2133272.8000 | 60 | 10158 | 116342886 | 127996368 |

+--------+-------------------+---------------+----------------+----------------+-------------+


6.結果集篩選:?HAVING

現在查詢寬高比在 1.1 和 1.3 之間的圖片

|-- 如果用WHERE 來查詢 感覺有點不優雅

SELECT

pic_path AS 路徑 ,

pic_width/pic_height AS '寬高比'

FROM pic

WHERE pic_width/pic_height > 1.1 && pic_width/pic_height<1.3;

+------------------------------------------------------------------+-----------+

| 路徑 | 寬高比 |

+------------------------------------------------------------------+-----------+

| dQXbnTRjUdNxhiyl.jpg | 1.2308 |

| JsXHWmKqOlziKmeA.jpg | 1.2600 |

| logo\android\Android原生繪圖之讓你了解View的運動.png | 1.2884 |

| 洛天依.jpg | 1.1990 |

+------------------------------------------------------------------+-----------+

|-- AS 相當于將列取了變量,對結果集再進行篩選用HAVING,用WHERE則報錯,找不到列

SELECT

pic_path AS 路徑 ,

pic_width/pic_height AS ratio

FROM pic

HAVING ratio > 1.1 && ratio <1.3;

+------------------------------------------------------------------+--------+

| 路徑 | ratio |

+------------------------------------------------------------------+--------+

| dQXbnTRjUdNxhiyl.jpg | 1.2308 |

| JsXHWmKqOlziKmeA.jpg | 1.2600 |

| logo\android\Android原生繪圖之讓你了解View的運動.png | 1.2884 |

| 洛天依.jpg | 1.1990 |

+------------------------------------------------------------------+--------+


7.結果排序:?ORDER BY

按照 ratio 將序排列

SELECT

pic_path AS 路徑 ,

pic_width/pic_height AS ratio

FROM pic

HAVING ratio > 1.1 && ratio <1.3;

ORDER BY ratio DESC

+------------------------------------------------------------------+--------+

| 路徑 | ratio |

+------------------------------------------------------------------+--------+

| dQXbnTRjUdNxhiyl.jpg | 1.2308 |

| JsXHWmKqOlziKmeA.jpg | 1.2600 |

| logo\android\Android原生繪圖之讓你了解View的運動.png | 1.2884 |

| 洛天依.jpg | 1.1990 |

+------------------------------------------------------------------+--------+


8.控制條目數:?LIMIT

|-- 偏移一條,取兩條

SELECT

pic_path AS 路徑 ,

pic_width/pic_height AS ratio

FROM pic

HAVING ratio > 1.1 && ratio <1.3

ORDER BY ratio DESC LIMIT 1,2;

+----------------------+--------+

| 路徑 | ratio |

+----------------------+--------+

| JsXHWmKqOlziKmeA.jpg | 1.2600 |

| dQXbnTRjUdNxhiyl.jpg | 1.2308 |

+----------------------+--------+


三、子查詢?(LEVER3)

1.查詢大于平均尺寸的圖片 --?WHERE

|--- 出現在其他SQL語句內的SELECT語句

|--- 子查詢必須在()內

|--- 增刪改查都可以進行子查詢,返回:標量,行,列或子查詢

|-- 1-1:查出圖片平均大小

SELECT

ROUND(AVG(pic_length),2) AS '平均大小'

FROM pic;

+--------------+

| 平均大小 |

+--------------+

| 555031.80 |

+--------------+

1 row in set (0.00 sec)

|-- 1-2:在用WHERE 篩選

SELECT

pic_path AS 路徑 ,

pic_length AS '大小/byte'

FROM pic

WHERE pic_length > 555031.80;

+----------------------------------------------+-------------+

| 路徑 | 大小/byte |

+----------------------------------------------+-------------+

| 30000X20000.jpg | 116342886 |

| 3000X2000.jpg | 3404969 |

| android\12284e5f7197d8be737fa967c8b00fbe.png | 829338 |

| android\594665add495ac9da8b6bbee1c63f1b8.png | 598974 |

| android\7cc97458727e23f7d161b8a1a7c6b453.png | 559420 |

| android\cbb1524f5ab4266698f3a6fc2992ccae.png | 829338 |

| android\d52539b1b508a594d1f2865037ff50c5.png | 598974 |

| android\f07ddfe5a103e4a024e14e2569f1d70e.png | 829338 |

| android\f0d1e7713d5557a8f9c74c9904843e09.png | 559420 |

| bg.png | 688207 |

| gtQiXnRfkvvTLinw.jpg | 771187 |

| poem\珊瑚墓地.jpg | 984472 |

| XoazFNMQROveEPQn.jpg | 795364 |

+----------------------------------------------+-------------+

|--- 也就是將一個語句包在WHERE 條件里

SELECT

pic_path AS 路徑 ,

pic_length AS '大小/byte'

FROM pic

WHERE pic_length > (

SELECT

ROUND(AVG(pic_length),2)

FROM pic

);


2.查出每種類型的最新插入的圖片 --?WHERE

SELECT

pic_path AS 路徑 ,

pic_mime AS 類型

FROM pic

WHERE id IN (

SELECT

max(id)

FROM pic

GROUP BY pic_mime

);

+------------------+--------+

| 路徑 | 類型 |

+------------------+--------+

| 洛天依.jpg | 1 |

| 虛擬機棧.png | 0 |

+------------------+--------+


3.FROM子查詢 --?FROM

SELECT

id,

pic_path AS 路徑 ,

pic_length AS '大小/byte'

FROM pic

WHERE id>=10&&id<=15

ORDER BY pic_length DESC;

+----+----------------------------------------------+-------------+

| id | 路徑 | 大小/byte |

+----+----------------------------------------------+-------------+

| 15 | android\0f3bf63796ac370a08ee97b056b0587b.png | 178849 |

| 14 | android\0951ef0be68f0c498ca34ffcd7fc7faa.png | 175842 |

| 11 | android\079c4cb46c95b2365b5bc5150e7d5213.png | 86996 |

| 10 | android\0655e07d6717847489cd222c9c9e0b1d.png | 53764 |

| 12 | android\07a4dc9b4b207cb420a71cbf941ad45a.png | 46270 |

| 13 | android\07abb7972a5638b53afa3b5eb98b19c1.png | 43360 |

+----+----------------------------------------------+-------------+

|--- 將查詢結果當做一張表,再查詢操作

SELECT

id,路徑 FROM (

SELECT

id,

pic_path AS 路徑 ,

pic_length AS '大小/byte'

FROM pic

WHERE id>=10&&id<=15

ORDER BY pic_length DESC

) AS result

WHERE `大小/byte` < 59999;

+----+----------------------------------------------+

| id | 路徑 |

+----+----------------------------------------------+

| 10 | android\0655e07d6717847489cd222c9c9e0b1d.png |

| 12 | android\07a4dc9b4b207cb420a71cbf941ad45a.png |

| 13 | android\07abb7972a5638b53afa3b5eb98b19c1.png |

+----+----------------------------------------------+


四、連接查詢

0.創建關聯表

首先連接查詢要多張表,現在建一個 mime_type 的表

|--- 建表

CREATE TABLE mime_type(

mime_id SMALLINT UNSIGNED PRIMARY KEY,

mime_info CHAR(24)

);

|--- 插入數據

INSERT INTO mime_type(mime_id,mime_info) VALUES

(0,'image/png'),

(1,'image/jpeg'),

(2,'image/svg+xml'),

(3,'video/mp4'),

(4,'text/plain');

|--- 效果

mysql> select * from mime_type;

+---------+---------------+

| mime_id | mime_info |

+---------+---------------+

| 0 | image/png |

| 1 | image/jpeg |

| 2 | image/svg+xml |

| 3 | video/mp4 |

| 4 | text/plain |

+---------+---------------+

|-- 為了說明問題,pic表添加一條測試數據:pic_mime = 8 也就是 mime_type表找不到時

INSERT INTO pic(pic_path,pic_length,pic_mime,pic_width,pic_height) VALUES('test.jpg',100,8,300,200);


1.內連接查詢?INNER JOIN

SELECT 待查屬性 FROM 表1I NNER JOIN 表2O N條件 WHERE 條件

SELECT id, pic_path AS 路徑 , mime_type.mime_info AS 類型 , pic_length

FROM pic INNER JOIN mime_type

ON pic.pic_mime = mime_type.mime_id

ORDER BY id DESC LIMIT 4;

+-----+------------------+------------+------------+

| id | 路徑 | 類型 | pic_length |

+-----+------------------+------------+------------+

| 289 | 虛擬機棧.png | image/png | 63723 |

| 288 | 統一返回.png | image/png | 29485 |

| 287 | 洛天依.jpg | image/jpeg | 42117 |

| 286 | 標記整理.png | image/png | 29288 |

+-----+------------------+------------+------------+


2.左連接查詢 :?LEFT JOIN

保持左表的記錄完整性,右表查不到就擺 NULL

SELECT id, pic_path AS 路徑 , mime_type.mime_info AS 類型 , pic_length

FROM pic LEFT JOIN mime_type

ON pic.pic_mime = mime_type.mime_id

ORDER BY id DESC LIMIT 4;

+-----+------------------+------------+------------+

| id | 路徑 | 類型 | pic_length |

+-----+------------------+------------+------------+

| 290 | test.jpg | NULL | 100 |

| 289 | 虛擬機棧.png | image/png | 63723 |

| 288 | 統一返回.png | image/png | 29485 |

| 287 | 洛天依.jpg | image/jpeg | 42117 |

+-----+------------------+------------+------------+


3. 右(外)連接查詢 :?RIGHT JOIN

保持右表的記錄完整性,左表查不到就擺 NULL

SELECT id, pic_path AS 路徑 , mime_type.mime_info AS 類型 , pic_length

FROM pic RIGHT JOIN mime_type

ON pic.pic_mime = mime_type.mime_id

ORDER BY id LIMIT 8;

+------+--------------------------------------+---------------+------------+

| id | 路徑 | 類型 | pic_length |

+------+--------------------------------------+---------------+------------+

| NULL | NULL | text/plain | NULL |

| NULL | NULL | video/mp4 | NULL |

| NULL | NULL | image/svg+xml | NULL |

| 1 | 30000X20000.jpg | image/jpeg | 116342886 |

| 2 | 3000X2000.jpg | image/jpeg | 3404969 |

| 3 | 300X200.jpg | image/jpeg | 99097 |

| 4 | 30X20.jpg | image/jpeg | 10158 |

| 5 | 6dc9e8455c47d964e1a8a4ef04cf9477.jpg | image/jpeg | 236254 |

+------+--------------------------------------+---------------+------------+


4. 全(外)連接 (偽):?使用UNION

MySQL 不支持全外連接,所以只能采取關鍵字 UNION 來聯合左、右連接的方法 UNION : 將若干條 sql 的查詢結果集合并成一個。 UNION ALL不會覆蓋相同結果

SELECT id, pic_path AS 路徑 , mime_type.mime_info AS 類型 , pic_length

FROM pic LEFT JOIN mime_type ON pic.pic_mime = mime_type.mime_id

UNION(

SELECT id, pic_path AS 路徑 , mime_type.mime_info AS 類型 , pic_length

FROM pic RIGHT JOIN mime_type ON pic.pic_mime = mime_type.mime_id

)

ORDER BY id DESC;

+------+------------------------------------------------------------------------------------+---------------+------------+

| id | 路徑 | 類型 | pic_length |

+------+------------------------------------------------------------------------------------+---------------+------------+

| 290 | test.jpg | NULL | 100 |

| 289 | 虛擬機棧.png | image/png | 63723 |

| 288 | 統一返回.png | image/png | 29485 |

| 287 | 洛天依.jpg | image/jpeg | 42117 |

...

| 3 | 300X200.jpg | image/jpeg | 99097 |

| 2 | 3000X2000.jpg | image/jpeg | 3404969 |

| 1 | 30000X20000.jpg | image/jpeg | 116342886 |

| NULL | NULL | text/plain | NULL |

| NULL | NULL | video/mp4 | NULL |

| NULL | NULL | image/svg+xml | NULL |

+------+------------------------------------------------------------------------------------+---------------+------------+


5. UNION 小測試

CREATE TABLE a(

id CHAR(4),

num INT

);

INSERT INTO a(id,num) VALUES

('a',4),('b',6),('c',2),('d',8);

CREATE TABLE b(

id CHAR(4),

num INT

);

INSERT INTO b(id,num) VALUES

('b',8),('c',7),('d',3),('e',18);

mysql> SELECT * FROM a; mysql> SELECT * FROM b;

+------+------+ +------+------+

| id | num | | id | num |

+------+------+ +------+------+

| a | 4 | | b | 8 |

| b | 6 | | c | 7 |

| c | 2 | | d | 3 |

| d | 8 | | e | 18 |

+------+------+ +------+------+

SELECT id,sum(num) FROM

(SELECT * FROM a

UNION ALL

SELECT * FROM b) as temp

GROUP BY id;

+------+----------+

| id | sum(num) |

+------+----------+

| a | 4 |

| b | 14 |

| c | 9 |

| d | 11 |

| e | 18 |

+------+----------+


六、DDL 建庫/表

1、關于操作數據庫

SHOW DATABASES; # 顯示所有的數據庫

SHOW CREATE DATABASE # 查看數據庫創建信息

USE ; # 使用數據庫

CREATE DATABASE [CHARACTER SET ]; # 創建一個將的數據庫指定字符集

ALTER DATABASE CHARACTER SET ; # 修改數據庫字符集

DROP DATABASE ; # 傳說中的刪庫跑路

SELECT DATABASE(); # 查看當前選中的數據庫


2.顯示數據庫信息

SHOW TABLES; # 展示當前數據庫中的表

SHOW TABLES FROM mysql # 展示指定數據庫中的表

DESC ; # 查看表結構

SHOW COLUMNS FROM ; # 查看表結構


3.創建表

|-- UNSIGNED 無符號 AUTO_INCREMENT 自增長

|-- ZEROFILL 前面自動填 0 , 默認 UNSIGNED

CREATE TABLE create_test(

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

code TINYINT(5) ZEROFILL DEFAULT 0

);

INSERT INTO create_test(code) VALUES (5);

INSERT INTO create_test VALUES (); #默認值測試

mysql> SELECT * FROM create_test;

+----+-------+

| id | code |

+----+-------+

| 1 | 00005 |

| 2 | 00000 |

+----+-------+


4.為表增加屬性

ALTER TABLEADD屬性信息[AFTER屬性];

|-- 看一下當前表結構

mysql> DESC create_test;

+-------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

+-------+------------------------------+------+-----+---------+----------------+

mysql> ALTER TABLE create_test ADD age SMALLINT UNSIGNED NOT NULL;

mysql> DESC create_test;

+-------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+-------+------------------------------+------+-----+---------+----------------+

|-- AFTER可將屬性排在指定屬性之后(強迫癥專用)

|-- ALTER TABLE create_test ADD password VARCHAR(32) AFTER id;

mysql> ALTER TABLE create_test ADD password VARCHAR(32) AFTER id;

mysql> DESC create_test;

+----------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| password | varchar(32) | YES | | NULL | |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+----------+------------------------------+------+-----+---------+----------------+

|-- 一次添加多個屬性

ALTER TABLE create_test ADD (aaa VARCHAR(32), bbb VARCHAR(32),ccc VARCHAR(32));

mysql> DESC create_test;

+----------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| password | varchar(32) | YES | | NULL | |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

| aaa | varchar(32) | YES | | NULL | |

| bbb | varchar(32) | YES | | NULL | |

| ccc | varchar(32) | YES | | NULL | |

+----------+------------------------------+------+-----+---------+----------------+


5.為表刪除屬性

ALTER TABLE DROP 屬性

ALTER TABLE create_test DROP aaa,DROP bbb,DROP ccc;

mysql> DESC create_test;

+----------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| password | varchar(32) | YES | | NULL | |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+----------+------------------------------+------+-----+---------+----------------+


6.修改屬性的類型

ALTER TABLE MODIFY 屬性 屬性類型[FIRST];

|-- 把password改成VARCHAR(40)

ALTER TABLE create_test MODIFY password VARCHAR(40);

mysql> DESC create_test;

+----------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| password | varchar(40) | YES | | NULL | |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+----------+------------------------------+------+-----+---------+----------------+

|-- 將某個屬性移到最頂

ALTER TABLE create_test MODIFY password VARCHAR(40) FIRST;

+----------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------------------+------+-----+---------+----------------+

| password | varchar(40) | YES | | NULL | |

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+----------+------------------------------+------+-----+---------+----------------+


7.修改表的屬性名

ALTER TABLE CHANGE 原屬性新屬性新屬性類型;

mysql> ALTER TABLE create_test CHANGE password pw varchar(40);

mysql> DESC create_test;

+-------+------------------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+----------------+

| pw | varchar(40) | YES | | NULL | |

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

| code | tinyint(5) unsigned zerofill | YES | | 00000 | |

| age | smallint(5) unsigned | NO | | NULL | |

+-------+------------------------------+------+-----+---------+----------------+


8.修改表名

方式一: ALTER TABLE 舊表名 RENAME 新表名;方式二: RENAME TABLE 舊表名 TO 新表名;

ALTER TABLE create_test RENAME 阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮;

mysql> SHOW TABLES;

+--------------------------------------------------------+

| Tables_in_datatype |

+--------------------------------------------------------+

| 阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮 |

| a |

| b |

| mime_type |

| pic |

| type_number |

+--------------------------------------------------------+

RENAME TABLE 阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮 TO toly;

mysql> SHOW TABLES;

+--------------------+

| Tables_in_datatype |

+--------------------+

| a |

| b |

| mime_type |

| pic |

| toly |

| type_number |

+--------------------+

SQL 的基礎就這樣 , 下篇見

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode744. 尋找比目標字母大的最小字母(二分查找)

給你一個排序后的字符列表 letters &#xff0c;列表中只包含小寫英文字母。另給出一個目標字母 target&#xff0c;請你尋找在這一有序列表里比目標字母大的最小字母。 在比較時&#xff0c;字母是依序循環出現的。舉個例子&#xff1a; 如果目標字母 target ‘z’ 并且字符…

H3C交換機 匯聚接口上應用策略路由

QOS 方式的策略路由只能應用在接口或者Vlan接口上&#xff0c;無法應用在2層或者3層的匯聚接口上可以使用PBR的方式將策略路由應用到接口上&#xff0c;QOS策略路由可以和PBR策略路由共存&#xff0c;并且QOS的優先級更高&#xff0c;先匹配QOS&#xff0c;如果匹配不到再匹配P…

【Java NIO深入研究3】文件鎖

1.1概述——文件鎖 文件鎖定初看起來可能讓人迷惑。它 似乎 指的是防止程序或者用戶訪問特定文件。事實上&#xff0c;文件鎖就像常規的 Java 對象鎖 — 它們是 勸告式的&#xff08;advisory&#xff09; 鎖。它們不阻止任何形式的數據訪問&#xff0c;相反&#xff0c;它們通…

2018-2019-2 網絡對抗技術 20165202 Exp9 Web安全基礎

博客目錄 一、實踐內容 跨站腳本攻擊XSS跨站請求偽造CSRFSQL注入攻擊二、實驗中遇到的問題及解決三、基礎問題回答四、實驗總結一、實踐內容 本實踐的目標理解常用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。具體過程&#xff1a; 跨站腳本攻擊XSS跨站請求偽造CSRFSQL注入…

leetcode696. 計數二進制子串

給定一個字符串 s&#xff0c;計算具有相同數量0和1的非空(連續)子字符串的數量&#xff0c;并且這些子字符串中的所有0和所有1都是組合在一起的。 重復出現的子串要計算它們出現的次數。 示例 1 : 輸入: “00110011” 輸出: 6 解釋: 有6個子串具有相同數量的連續1和0&#…

idea無法忍受_不要成為無法忍受的軟件開發人員

idea無法忍受by Bruce Flow通過布魯斯流 不要成為無法忍受的軟件開發人員 (Don’t be the software developer you can’t stand working with) I have more than 10 years of industry experience as a software developer. I am working at one of the largest tech compani…

項目需求分析答辯總結

前言 組長成員★530 雨勤311 旭403 俊223 元437 海輝你一定也不想做的 本次作業沒什么可看的 項目需求分析看完記得投幣的 一分鐘宣傳視頻本組對其他各組評審結果 編號團隊名稱項目名稱報告格式/20演示內容/20答辯內容/20PPT制作/20演講/20總分/1001天機組指尖加密15.013.613.6…

xml編輯 html_【c# .net】Xml讀寫操作(XmlTextReader 類)

Xml讀寫操作&#xff08;XmlTextReader 類&#xff09;1.XML簡介1&#xff09;XML 和 HTML 的設計初衷XML 被設計用來傳輸和存儲數據HTML 被設計用來顯示數據2&#xff09;什么是 XML?XML 指可擴展標記語言&#xff08;EXtensible Markup Language&#xff09;XML 是一種標記語…

jQ層級選擇器

<!DOCTYPE html><html> <head> <meta charset"utf-8" /> <title></title> </head> <body> </body></html> <h1>沁園春雪</h1> <h2>毛***</h2> <div> <span> <d…

spring 獲取url參數

1. usl格式&#xff1a; http://localhost:8080/contact/delete/3 java代碼 RequestMapping(value"/delete/{id}")public Map<String,Object> delete(PathVariable("id") Integer id){boolean result contactService.deleteContactById(id); 也可以…

leetcode475. 供暖器(二分查找)

冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。 現在&#xff0c;給出位于一條水平線上的房屋和供暖器的位置&#xff0c;找到可以覆蓋所有房屋的最小加熱半徑。 所以&#xff0c;你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑…

如何在命令行中使用jq將JSON轉換為CSV

by Knut Melvr通過納特梅爾瓦 如何在命令行中使用jq將JSON轉換為CSV (How to transform JSON to CSV using jq in the command line) The shell tool jq is awesome for dealing with JSON-data. It can also transform that data into handy CSV-files, ready for all your s…

macaca運行報錯之chrome-driver問題處理,關閉 Chrome 的自動更新

自動更新是 Chrome 非常實用的功能之一&#xff0c;但在有些情況下可能還是有關閉自動更新的需求&#xff0c;比如需要用某一個具體的版本來測試一些東西&#xff0c;或者更新之后反而出現了新的 Bug等等。由于一般人沒有這樣的需求&#xff0c;所以 Google 沒有公布關閉自動更…

docker啟動sqlserver_Docker搭建SQLServer

一、下載鏡像docker pull microsoft/mssql-server-linux二、啟動容器docker-composeversion: 3services:sqlserver:image: microsoft/mssql-server-linux:latestrestart: alwaysprivileged: truecontainer_name: sqlserverports:- 1433:1433volumes:- ./data:/var/opt/mssql/da…

【Python】 子進程創建與使用subprocess

subprocess *****本文參考了Vamei大神的http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html   運用subprocess包可以在運行python的進程下進一步開啟一個子進程&#xff0c;創建子進程要注意 1. 父進程是否暫停 2.創建出的子進程返回了什么 3.執行出錯&#xff0c…

異步查詢回調函數調用

異步查詢數據&#xff0c;需要對返回的數據進行后續步驟操作&#xff0c;使用使用方法&#xff1a; 1、new promise方法使用。 2、回調函數使用 使用方式&#xff1a;   pageGetDeviceTreeInfo({deviceTypeAry:[1]},this.getTreeData); 函數&#xff1a; 1 export function p…

前端開發從項目中獲得什么_我如何獲得副項目的前10個客戶以及從他們那里學到的東西...

前端開發從項目中獲得什么by Tigran Hakobyan由Tigran Hakobyan 我如何獲得副項目的前10個客戶以及從他們那里學到的東西 (How I got my first 10 customers for my side-project and what I’ve learned from them) My name is Tigran, I’m 29, and I’m the creator of Cro…

leetcode278. 第一個錯誤的版本(二分查找)

你是產品經理&#xff0c;目前正在帶領一個團隊開發新的產品。不幸的是&#xff0c;你的產品的最新版本沒有通過質量檢測。由于每個版本都是基于之前的版本開發的&#xff0c;所以錯誤的版本之后的所有版本都是錯的。 假設你有 n 個版本 [1, 2, …, n]&#xff0c;你想找出導致…

lrzsz ??linux與windows互傳

2019獨角獸企業重金招聘Python工程師標準>>> lrzsz linux與windows互傳 # 前提是使用 xshell 或者 securecrt 這兩個遠程軟件&#xff0c;putty不支持 yum install -y lrzsz //安裝文件包 linux向windows 傳文件使用 &#xff1a; sz 文件名 回…

mysql show 命令_mysql show 相關命令

processlist的show方式是不能使用過濾查找&#xff0c;可能源自MySQL的內部安全機制吧&#xff0c;show是用來查看MySQL內部運行數據&#xff0c;其實processlist就是information_schema數據庫中的一張表&#xff0c;那么通過查表的方式肯定是可以的了&#xff1a;SELECT user,…