SQL簡介
SQL(Structured Query Language 結構化查詢語句)是一種特定目的程序語言,用於管理關系數據庫管理系統(RDBMS),或在關系流數據管理系統(RDSMS)中進行流處理。
SQL基於關系代數和元組關系演算,包括一個數據定義語言和數據操縱語言。SQL的范圍包括數據插入、查詢、更新和刪除,數據庫模式創建和修改,以及數據訪問控制。
同時也是數據庫腳本文件的擴展名,SQL對大小寫不敏感,他不是數據庫。
SQL分類
可以把 SQL 分為兩個部分:
DML:Data Manipulation Language 數據操作語言
DDL:Data Definition Language 數據定義語言
但是 SQL 語言也包含用於更新、插入和刪除記錄的語法。
查詢和更新指令構成了 SQL 的 DML 部分:
- SELECT - 從數據庫表中獲取數據
- UPDATE - 更新數據庫表中的數據
- DELETE - 從數據庫表中刪除數據
- INSERT INTO - 向數據庫表中插入數據
SQL 的數據定義語言 (DDL) 部分使我們有能力創建或刪除表格。我們也可以定義索引(鍵),規定表之間的鏈接,以及施加表間的約束。
SQL 中最重要的 DDL 語句:
- CREATE DATABASE - 創建新數據庫
- ALTER DATABASE - 修改數據庫
- CREATE TABLE - 創建新表
- ALTER TABLE - 變更(改變)數據庫表
- DROP TABLE - 刪除表
- CREATE INDEX - 創建索引(搜索鍵)
常用數據庫
常見數據排行榜 DB-Engines 2021年統計
為什么選擇mysql?:免費 功能強大
環境搭建:點擊此處
開始學習了~~~
一、DDL操作數據庫
1.1 創建數據庫
1. 【強制】庫的名稱必須控制在 32 個字符以內,相關模塊的表名與表名之間盡量提現 join的關系,如 user 表和 user_login 表。
2. 【強制】庫的名稱格式:業務系統名稱_子系統名,同一模塊使用的表名盡量使用統一前綴。
3. 【強制】一般分庫名稱命名格式是“庫通配名_編號”,編號從“0”開始遞增,比如“wenda_001”以時間進行分庫的名稱格式是“庫通配名_時間”
4. 【強制】創建數據庫時必須顯式指定字符集,並且字符集只能是 utf8 或者 utf8mb4創建數據庫 SQL 舉例:Create database db1 default character set utf8;
-- 創建數據庫 CREATE DATABASE 數據庫名;
-- 判斷數據庫是否已經存在,不存在則創建數據庫 CREATE DATABASE IF NOT EXISTS 數據庫名;
-- 創建數據庫並指定字符集 CREATE DATABASE 數據庫名 DEFAULT CHARACTER SET 字符集;
練習:1.判斷數據庫是否存在 ,不存在創建一個數據庫Test_(你的名字字母) 指定字符集為utf-8
1.2 注釋
SQL 中不區分大小寫,關鍵字中認為大寫和小寫是一樣的 mysql 3種注釋 如下圖
1.3 查看數據庫
-- 查看所有的數據庫 show databases;-- 查看某個數據庫的定義信息
show create database db3;
show create database db1;
1.4 修改數據庫
-- 修改數據庫默認的字符集 ALTER DATABASE 數據庫名 DEFAULT CHARACTER SET 字符集;
練習:將TestDB_001 數據庫字符集修改成utf8mb4
1.5 刪除數據庫
DROP DATABASE 數據庫名;
1.6 使用數據庫
-- 查看正在使用的數據庫 SELECT DATABASE(); -- 使用的一個 mysql 中的全局函數-- 使用/切換數據庫
USE 數據庫名;
二、DDL操作表結構
2.1 創建表
CREATE TABLE 表名 ( 字段名 1 字段類型 1, 字段名 2 字段類型 2 );
2.2 MySql常見數據類型
詳細數據類型:參考此處
如:創建一個student學生表 包含id,name,birthday字段
create table(
id int, -- 整數 name varchar(20), --字符串 給20個 birthday date -- 日期 最后一個字段可以省略逗號不寫 );
2.3 查看表
-- 查看某個數據庫中的所有表 SHOW TABLES;-- 查看表結構
DESC 表名;-- 查看創建表的 SQL 語句
SHOW CREATE TABLE 表名;
2.4 快速創建一個相同得表結構
-- 創建一個 s1 的表與 student 結構相同 create table s1 like student;
2.5 刪除表
-- 直接刪除表 DROP TABLE 表名;
-- 判斷表是否存在,如果存在則刪除表 不存在不刪除 DROP TABLE IF EXISTS 表名;
2.6 修改表結構
-- 添加表列ADD ALTER TABLE 表名 ADD 列名 類型;
練習:為學生表添加一個新字段remark,類型為varchar(20)
-- 修改列類型 MODIFY ALTER TABLE 表名 MODIFY 列名 新的類型;
練習:將學生表得remark字段類型 修改為varchar(100)
-- 修改列名 CHANGE ALTER TABLE 表名 CHANGE 舊列名 新列名 類型;
練習:將學生表得remark字段 修改為intro varchar(30)
-- 刪除列 DROP ALTER TABLE 表名 DROP 列名;
練習:將學生表得intro字段 刪除
-- 修改表名 RENAME TABLE 表名 TO 新表名;
練習:將學生表表名修改為stu
-- 修改字符集 character set ALTER TABLE 表名 character set 字符集;
三、DML 表數據
3.1 添加數據 插入記錄
INSERT INTO 表名 (字段名) VALUES (字段值)INSERT INTO 表名:表示往哪張表中添加數據
(字段名 1, 字段名 2, …):要給哪些字段設置值
VALUES (值 1, 值 2, …):設置具體的值
-- 插入全部字段 -- 第一種寫法 所有的字段名都寫出來 INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);-- 第二種寫法 不寫字段名 默認全部字段 按順序一一對應
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
-- 插入部分數據 字段名和值 一一對應 INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
3.2 更新數據
UPDATE 表名 SET 列名=值 WHERE 條件表達式UPDATE: 需要更新的表名
SET: 修改的列值
WHERE: 符合條件的記錄才更新
你可以同時更新一個或多個字段。
你可以在 WHERE 子句中指定任何條件。
-- 不帶條件修改數據 UPDATE 表名 SET 字段名=值; -- 修改所有的行
-- 帶條件修改數據 UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
練習:將所有學生表性別sex修改為女
練習:將id為2得學生性別修改為男
練習:將id為3得學生年齡修改為18,address 修改為北京
3.3 刪除表數據
DELETE FROM 表名 WHERE 條件表達式-- 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。你可以在 WHERE 子句中指定任何條件
-- 不帶條件刪除數據 DELETE FROM 表名;-- 帶條件刪除數據
DELETE FROM 表名 WHERE 字段名=值;-- 使用 truncate 刪除表中所有記錄
TRUNCATE TABLE 表名;
注:truncate 和 delete 的區別:truncate 相當於刪除表的結構,再創建一張表。
3.4查詢數據
SELECT 列名 FROM 表名 WHERE 條件表達式1) SELECT 命令可以讀取一行或者多行記錄。
2) 你可以使用星號(*)來代替其他字段,SELECT 語句會返回表的所有字段數據
3) 你可以使用 WHERE 語句來包含任何條件。
-- 查詢表所有行和列的數據,使用*表示所有列 SELECT * FROM 表名;-- 查詢指定列,查詢指定列的數據,多個列之間以逗號分隔
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
3.5 指定列的別名進行查詢
-- 使用關鍵字,使用別名的好處: 顯示的時候使用新的名字,並不修改表的結構。-- 對列指定別名
SELECT 字段名 1 AS 別名, 字段名 2 AS 別名... FROM 表名;
-- 對列和表同時指定別名
SELECT 字段名 1 AS 別名, 字段名 2 AS 別名... FROM 表名 AS 表別名;
注:表使用別名的原因:用於多表查詢操作
3.6 清除重復值
-- 查詢指定列並且結果不出現重復數據 SELECT DISTINCT 字段名 FROM 表名;
3.7 查詢結果 參與運算
注:參與運算的必須是數值類型
-- 某列數據和固定值運算 SELECT 列名 1 + 固定值 FROM 表名;-- 某列數據和其他列數據參與運算
SELECT 列名 1 + 列名 2 FROM 表名;
練習:准備數據:添加數學,英語成績列,給每條記錄添加對應的數學和英語成績,查詢的時候將數學和英語的成績相加 求出總成績
3.8 條件查詢
-- 條件查詢的語法 SELECT 字段名 FROM 表名 WHERE 條件; -- 流程:取出表中的每條數據,滿足條件的記錄就返回,不滿足條件的記錄不返回
准備數據
CREATE TABLE student3 ( id int, -- 編號 name varchar(20), -- 姓名 age int, -- 年齡 sex varchar(5), -- 性別 address varchar(100), -- 地址 math int, -- 數學 english int -- 英語 );INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES
(1,'張飛',55,'男','杭州',66,78),
(2,'趙美美',45,'女','深圳',98,87),
(3,'劉備',55,'男','香港',56,77),
(4,'大喬',20,'女','湖南',76,65),
(5,'趙雲',20,'男','湖南',86,NULL),
(6,'曹操',57,'男','香港',99,99),
(7,'小喬啊',22,'女','香港',99,99),
(8,'喬哈哈',18,'男','南京',56,65);
運算符、范圍查詢、模糊查詢、in
select 字段名 from 表名 where 字段名 BETWEEN 最小值 and 最大值 ; select 字段名 from 表名 where 字段名 like '%值'
練習:
邏輯運算
練習:
-- in 關鍵字,in 里面的每個數據都會作為一次條件,只要滿足條件的就會顯示 SELECT 字段名 FROM 表名 WHERE 字段 in (數據 1, 數據 2...);
練習:
1.查詢 id 是 1 或 3 或 5 的學生
2.查詢 id 不是 1 或 3 或 5 的學生
-- 范圍查詢 BETWEEN 值 1 AND 值 2 -- 表示從值 1 到值 2 范圍,包頭又包尾 -- 比如:age BETWEEN 80 AND 100 相當於: age>=80 && age<=100
練習:
-- like 關鍵字 LIKE 表示模糊查詢 SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
練習:
1.查詢姓趙的學生
2.查詢姓名中包含'喬'字的學生
3.查詢姓趙,且姓名有兩個字的學生