-
創建帶有空格的列名
CREATE TABLE customer ( customerId INTEGER NOT NULL AUTO_INCREMENT, `first Name` VARCHAR(16), `last Name` VARCHAR(16), PRIMARY KEY (customerId) ) ENGINE=INNODB CHARSET=UTF8;
帶有空格的屬性,無論實在創建的過程中或是
CRUD
操作都需要用``
重 音符將其包括起來。 連接字段
出于某種目的 ,我們可能想要將表中的兩列組合在一起,在SQL
中可以使用+
將兩個字段連接在一起,但是在MySQL
中我們需要借助concat()
函數。
SELECT
CONCAT(first Name
,last Name
)
FROM
customer;轉換函數
有的時候我們可能需要將NULL
值轉換成有意義的內容。可以借助IFNULL
將NULL
值轉換成其它內容。
SELECT
IFNULL(last name
, 'unknown') AS 'name'
FROM
customer;Case
表達式
有時候我們會將人的性別存儲為int
類型, 0 代表男性,1 代表女性。所以這個時候我們在查詢數據庫的時候需要將數據進行轉換。
SELECT
CASE
WHEN sex = 0 THEN 'man'
WHEN sex = 1 THEN 'woman'
ELSE 'Unknown'
END AS 'SEX'
FROM
customer;
以上代碼的意思就是,如果查詢到sex
為 0, 則返回man
,如果sex
為 1,則返回woman
,如果既不是 0 也不是 1,則返回Unknown
.限制行
有時候,對于數據庫中成千上萬條記錄,可能只有前幾條是我們感興趣的,那么這個時候我們可能用到limit
關鍵字。
SELECT
CASE
WHEN sex = 0 THEN 'man'
WHEN sex = 1 THEN 'woman'
ELSE 'Unknown'
END AS 'SEX'
FROM
customer
LIMIT 1;
以上代碼就是返回數據庫中的第一條記錄。
下面我們將創建兩張表,接下來的內容都圍繞這兩張表展開。
CREATE TABLE student (
studentId INTEGER NOT NULL,
studentName VARCHAR(16) NOT NULL,
studentSex SMALLINT,
PRIMARY KEY (studentId)
) ENGINE=INNODB CHARSET=UTF8;
CREATE TABLE address (
addressId INTEGER NOT NULL,
province VARCHAR(8),
city VARCHAR(8),
FOREIGN KEY (addressId)
REFERENCES student (studentId)
) ENGINE=INNODB CHARSET=UTF8;
向表中插入幾條數據。
INSERT INTO student VALUES(1,'hwaphon',0);
INSERT INTO student VALUES(2,'sun',1);
INSERT INTO address VALUES(1,'Anhui','Wuhu');
INSERT INTO address VALUES(2,'Hebei','Tianjin');
NOT 操作符
SELECT
studentName
FROM
student
WHERE
NOT studentSex = 0;
實際上可以使用<>
實現同樣的效果。
SELECT
studentName
FROM
student
WHERE
studentSex <> 0;模糊匹配
比如我們現在想找一個名字中帶有phon
的人。
SELECT
studentName
FROM
student
WHERE
studentName LIKE '%phon%';
%
代表可以匹配任意多個任意字符,當然還存在_
字符,代表可以匹配一個任意字符。內聯接
SELECT
*
FROM
student
INNER JOIN
address ON student.studentId = address.addressId;
雖然使用WHERE
語句也能達到相同的效果,但是并不推薦那么做。-
外聯接
外聯接分為三種,分別是左外聯接,右外聯接和全鏈接。下面,我們舉例來看看這三種聯接。
首先,再插入一條student
記錄。
INSERT INTO student VALUES(3,'John',0);
這個時候adress
表中并沒有John
的地址信息,所以如果這個時候使用內聯接查詢數據,顯示結果如下。
demo01.png
如果我們想既想進行聯接操作,又不想讓信息丟失,那么這個時候我們只能使用左外聯接了。
SELECT
*
FROM
student
LEFT OUTER JOIN
address ON student.studentId = address.addressId;
這時候的查詢結果如下。
demo02.png
是的,本來應該被忽略掉的John
又顯示出來了,這就是左外聯接的作用,讓本來應該在聯接過程中消失的主表信息顯示出來,但是它不存在的那些列會自動填充NULL
。右外聯接和全聯接的作用和這個類似。