SQL(一)


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:開源 免費的數據庫,小型的數據庫,已經被 Oracle 收購了。后來 Sun公司收購了 MySQL,而 Sun 公司又被 Oracle 收購

 

Oracle:收費的大型數據庫,Oracle 公司的產品。 
SQL Server:MicroSoft 公司收費的中型的數據庫。C#、.net 等語言常使用。
SQLite: 嵌入式的小型數據庫,應用在手機端,如:Android。 

為什么選擇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;

注:按 tab 鍵可以自動補全關鍵字 

1.4 修改數據庫

-- 修改數據庫默認的字符集
ALTER DATABASE 數據庫名 DEFAULT CHARACTER SET 字符集;

練習:將TestDB_001 數據庫字符集修改成utf8mb4

 

1.5 刪除數據庫

DROP DATABASE 數據庫名;

1.6 使用數據庫

-- 查看正在使用的數據庫
SELECT DATABASE(); -- 使用的一個 mysql 中的全局函數

-- 使用/切換數據庫
USE 數據庫名;

 

二、DDL操作表結構

注:前提先使用某個數據庫 ,use 數據庫名;
 

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 字符集;
練習:將學生表字符集 修改為gbk

三、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, ...);
注:沒有添加數據的字段會使用 NULL 
練習:向學生表中插入兩個學生
 

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 '%值'

 

 

 練習:

1. 查詢 math 分數大於 80 分的學生
2.查詢 english 分數小於或等於 80 分的學生
3. 查詢 age 等於 20 歲的學生
4.查詢 age 不等於 20 歲的學生,注:不等於有兩種寫法

邏輯運算

 

 練習:

1. 查詢 age 大於 35 且性別為男的學生(兩個條件同時滿足)
2. 查詢 age 大於 35 或性別為男的學生(兩個條件其中一個滿足)
3. 查詢 id 是 1 或 3 或 5 的學生
 
-- in 關鍵字,in 里面的每個數據都會作為一次條件,只要滿足條件的就會顯示
SELECT 字段名 FROM 表名 WHERE 字段 in (數據 1, 數據 2...);

練習:

1.查詢 id 是 1 或 3 或 5 的學生 

2.查詢 id 不是 1 或 3 或 5 的學生 

 

-- 范圍查詢
BETWEEN1 AND2
-- 表示從值 1 到值 2 范圍,包頭又包尾
-- 比如:age BETWEEN 80 AND 100 相當於: age>=80 && age<=100

練習:

1.查詢 english 成績大於等於 75,且小於等於 90 的學生

 

-- like 關鍵字
LIKE 表示模糊查詢
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

 

 練習:

1.查詢姓趙的學生

2.查詢姓名中包含'喬'字的學生 

3.查詢姓趙,且姓名有兩個字的學生 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM