作者使用的數據庫為是MySQL8, 圖形化工具--SQLyog<獲取pj版可留言>
1. DDL(Data Definition language)操作數據庫--主要用于創(chuàng)建數據庫蘸吓、數據表
1.1 創(chuàng)建數據庫轧粟、查詢數據庫
# 創(chuàng)建數據庫
CREATE DATABASE db1;
# 判斷數據庫是否存在, 不存在就創(chuàng)建
CREATE DATABASE IF NOT EXISTS db2;
# 創(chuàng)建數據庫并指定字符集
CREATE DATABASE db3 DEFAULT CHARACTER SET utf8;
# 查詢數據庫
SHOW DATABASES ;
# 操作以后自行查詢即可
1.2 查看某個數據庫的定義信息
# 查看某個數據庫的定義信息
SHOW CREATE DATABASE db3;
SHOW CREATE DATABASE db1;
1.3 修改數據庫
# 修改數據庫默認的字符集【將原先設置的utf8字符集改為gbk笑窜,當然開發(fā)中使用的utf8】
ALTER DATABASE db3 CHARACTER SET gbk;
注意1.4的操作在開發(fā)中,千萬不要窗悯, 不要, 不要刪庫骡楼, 重要的事情說三遍
1.4 刪除數據庫
# 刪除數據庫
DROP DATABASE db2;
1.5 使用數據庫
# 查看目前所在的是哪個數據庫
SELECT DATABASE();
# 改變要使用的數據庫
USE db1;
2. DDL操作表結構--創(chuàng)建表操作
2.1 創(chuàng)建數據表的格式
CREATE TABLE table_name(
字段1 字段類型1,
字段2 字段類型2,
...
);
# 常見字段類型可以自行查閱措左, 因為官方出品必屬精品腌歉, 細節(jié)上個人絕對沒有集眾人之力做的好, 感謝
2.2 創(chuàng)建student表包含id齐苛,name翘盖,birthday等三個字段【這里我是在前面創(chuàng)建的db1數據庫中操作, 當然你可以自行創(chuàng)建一個屬于自己的】
# INT(整數) VARCHAR(字符串) DATE(日期)
CREATE TABLE student(
id INT,
NAME VARCHAR(32),
birthday DATE
);
2.3 查看表
# 查看db1【db1可以換成任意數據庫】中的數據庫中的所有表
SHOW TABLES;
# 查看創(chuàng)建的表的結構
DESC student;
# 查看創(chuàng)建表的SQL語句
SHOW CREATE TABLE student;
2.4 快速創(chuàng)建一個表結構相同的表
# 創(chuàng)建new_student表, new_student表結構和student結構相同
CREATE TABLE new_student LIKE student;
2.5 刪除表
# 刪除新創(chuàng)建的new_student表
DROP TABLE new_student;
# 下面是另一種格式: 判斷表是否存在, 如果存在則刪除, 可以用已經刪除的new_student表進行測試
DROP TABLE IF EXISTS new_student;
【SQLyog控制臺輸出的信息如下: 共 0 行受到影響凹蜂, 1 個警告】
2.6 修改表結構: 增加馍驯、刪除阁危、修改
# 添加表列關鍵字: ALTER ADD
# 在student表中添加學生的地址信息address
ALTER TABLE student ADD address VARCHAR(32);
# 修改列類型關鍵字:MODIFY
# 將student表中的address列類型修改為int類型【這里是不合理的僅供測試使用】
ALTER TABLE student MODIFY address INT;
# 修改列名關鍵字: CHANGE
# 將address該字段修改為new_addr, 并且字段類型改為varchar
ALTER TABLE student CHANGE address new_addr VARCHAR(32);
# 刪除列關鍵字: DROP
# 刪除new_addr列
ALTER TABLE student DROP new_addr;
# 修改表名關鍵字: RENAME TO
# 將student表名該為old_student
RENAME TABLE student TO old_student;
3. DML(Data Manipulation Language數據操縱語言)操作表中的數據【對表中的數據進行增刪改操作】
3.1 插入數據
# 格式: INSERT [INTO] 表名 [字段名] VALUES(字段值);
# 三種插入的方式【字段名用k表示汰瘫, 字段值用v表示】
# 1. 插入全部字段
INSERT INTO table_name (k1, k2, k3....) VALUES(v1, v2, v3...);
# 2. 不寫字段
INSERT INTO table_name VALUES(v1, v2, v3...);
# 3. 插入部分數據
INSERT INTO table_name (k1, k2) VALUES(v1, v2);
# 注意: 沒有添加數據的字段會使用NULL
# 例子: 向student表中添加一個scott的成員
INSERT INTO student(id, NAME, birthday) VALUES(1, 'scott', '1981-01-02');
# 可以自行添加更多的數據狂打, 本次這里只是舉個例子
# 查詢student中的數據
SELECT * FROM student;
3.2 更新表的數據
# 格式: UPDATE 表名 SET 列名 = 值 [WHERE 條件表達式];
# 1. 不帶條件修改數據
UPDATE 表名 SET 字段名=值混弥;# 修改所有的行
# 2. 待條件修改數據
UPDATE 表名 SET 字段名 = 值 WHERE 字段名 = 值趴乡;# 待條件修改數據
# 例子: 將student中的scott學生的name字段改為gunner
UPDATE student SET NAME='gunner' WHERE id=1;
3.3 刪除表的數據【三思而后行啊】
# 格式:DELETE FROM 表名 [WHERE 條件表達式];
# 如果沒有指定WHERE子句, MySQL表中的所有記錄將被刪除【慎重】
4. DQL(Data Query Language數據查詢語句)查詢表中的數據
# 先創(chuàng)建一個擁有多條數據的表
# 創(chuàng)建的student蝗拿, 包含的字段由id, name, gender, math_score, english_score,
CREATE TABLE student(
id INT, # 學生編號
NAME VARCHAR(32), # 學生姓名
gender INT, # 學生性別晾捏, 1表示男生, 0表示女孩
math_score DOUBLE, # 數學成績哀托, 因為可能為"99.5"所以使用DOUBLE
english_score DOUBLE# 英語成績
);
# 查詢student表是否創(chuàng)建成功
DESC student;
# 插入學生數據
INSERT INTO student(id, NAME, gender, math_score, english_score)
VALUES(1,'張三', 1, 90, 90.5);
# 查詢數據是否插入成功
SELECT * FROM student;
# 批量插入數據: 值得注意的是列與列要一一對應
INSERT INTO student
(id, NAME, gender, math_score, english_score)
VALUES
(2, '李四', 0, 100, 100),
(3, '王五', 1, 60, 70.5),
(4, '趙六', 1, 80, 88.5);
# 查詢現在student的數據有哪些【下面的SQL語句是最基礎的查詢結構】
SELECT * FROM student;
4.1 簡單查詢
# 1. 查詢指定列
# 格式: SELECT 字段1, 字段2... FROM 表名;
# 例子: 查詢id惦辛, name列的學生信息
SELECT id, NAME FROM student;
# 2. 指定列的別名進行查詢【作為國人有時候看咱們的漢語才是正道】
# 格式: SELECT 字段1 AS 別名1, 字段2 AS 別名2... FROM 表名;
# 例子: 查詢id別名為學生編號, name別名為學生姓名【別名不用加“ '' ”引號】
SELECT id AS 學生編號, NAME AS 學生姓名 FROM student;
# 3. 清除重復值
# 格式: SELECT DISTINCT 字段名 FROM 表名;
# 例子: 查詢學生的性別有哪些【1表示男仓手, 0表示女胖齐; 本次案例可能不是很適合這個場景, 你懂的】
SELECT DISTINCT gender FROM student;
4.2 稍微復雜一點
# 查詢結果參與運算【實際中可能會涉及到薪資嗽冒、工齡等數據】
# 格式1 : SELECT 列名1 + 固定值 FROM 表名呀伙;
# 例子1: 每個學生的數學成績加10分
SELECT math_score + 10 FROM student;
# 例子2: 例子1中的進行查詢的后字段名顯示的結果為 “math_score + 10”這樣很不好看, 這就是我們使用AS別名的時候到了
SELECT (math_score + 10) AS 數學最終成績 FROM student;
# 格式2: 某列數據和其他列數據參與運算
# 例子: 查詢學生總成績
SELECT id, NAME, (math_score + english_score) AS 總成績 FROM student;
4.3 條件查詢
# 我們在進行數據查詢的時候辛慰, 都是需要查詢自己想要的數據区匠, 那么自己心中一定有對數據有一定的要求, 這個要求對于數據來說就是滿足的某種條件帅腌。例如: 我們要查詢數學成績大于80分的幾個同學姓名驰弄, 那么低于80分的就要給他過濾掉, 這就是條件查詢的意義所在速客!
# 關鍵字: WHERE
# 格式: SELECT 字段名 FROM 表名 WHERE 所需要的條件;
比較運算符 | 說明 |
---|---|
>戚篙、<、<=溺职、>=岔擂、= 、<> | <>在SQL中表示不等于, 在msyql中也可以使用!=, 但是沒有== |
BETWEEN...AND | 在一個范圍內, 比如: BETWEEN 80 AND 100相當于條件在80到100之間, 這是一個閉區(qū)間(也就是包括首尾的80和100算在其中) |
IN() | 集合表示多個值, 使用逗號將每個值分離, IN從英語上來說是在其中的意思, 只要滿足其中一個就會查詢出來 |
LIKE | 模糊查詢, [本次案例不適合LIKE的講解, 在未來的更新中會再次講解] |
IS NULL | 查詢某一列為NULL的值, 注意: 不能寫成 = NULL [本次案例不適合IS NULL的講解, 在未來的更新中會再次講解] |
# 例子1: 查詢數學成績大于80分的學生都有誰
SELECT NAME, math_score # 第三步: 你想要顯示的信息是姓名和分數, 還是該學生的所有信息
FROM student # 第一步: 先確定是在哪個表中查詢
WHERE math_score > 80; # 第二步: 查詢的條件是什么
# 例子2: 查詢英語成績在60分到90分之間的學生都有誰
SELECT NAME, english_score
FROM student
WHERE english_score BETWEEN 60 AND 90;
# 例子3: 查詢數學成績?yōu)?0或者80或者100的學生都有誰
SELECT NAME, math_score
FROM student
WHERE math_score IN(60, 80, 100);
邏輯運算符 | 說明 |
---|---|
and 或 && | 與, SQL中建議使用前者, 后者并不通用 |
or 或 ll | 或 |
not 或 ! | 非 |
# 例子1: 查詢數學和英語成績都是100分的學生都有誰
SELECT NAME AS 姓名 , math_score AS 數學成績, english_score AS 英語成績
FROM student
WHERE math_score=100 AND english_score=100;
# 例子2: 查詢數學成績大于90[包括90]或者英語成績大于90[包括90]的學生都有誰
SELECT NAME AS 姓名 , math_score AS 數學成績, english_score AS 英語成績
FROM student
WHERE math_score >= 90 OR english_score >= 90;
# 查詢數學成績不合格的學生都有誰, [不合格的學生分數小于60[不包括60]]
SELECT NAME AS 姓名 , math_score AS 數學成績
FROM student
WHERE math_score < 60;
# 備注: 本人設置的每個學生都及格了, 畢竟大學時代最盼望的就是能夠及格?