MySQL的基本概念以及基本使用

一、SQL語句介紹

1.什麼是SQL?

    全稱 structured query language,簡稱SQL,中文叫結構化查詢語言。

    關係型數據庫語言的國際標準:SQL92、SQL99

    不止是MySQL,其他數據庫在SQL92或者SQL99這些國際SQL標準基礎上,還擴展了自己的一些SQL語句,比如MySQL中的limit關鍵字。

2.SQL分類:

  • 數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。關鍵字:create,alter,drop等
  • 數據操作語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert,delete,update等
  • 數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別,及創建用戶;關鍵字:grant等
  • 數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,from,where

二、SQL語句的使用

   1.數據庫操作:datebase

創建數據庫:

  create database 數據庫名;
  create database 數據庫名 character set 字符集;

查看數據庫:

查看數據庫服務器中的所有的數據庫:show databases;
查看某個數據庫的定義的信息:show create database 數據庫名;

刪除數據庫:

drop database 數據庫名稱;

其他命令:

切換數據庫:use 數據庫名;
查看正在使用的數據庫:select database();

    2.表操作:table

創建表:

create table 表名(
   字段名 類型(長度) 約束,
   字段名 類型(長度) 約束
);
單表約束:
    主鍵約束:primary key
    唯一約束:unique
    非空約束:not null
    注意:主鍵約束 = 唯一約束 + 非空約束

查看錶:

查看數據庫中的所有表:show tables;
查看錶結構:desc 表名;

刪除表:

drop table 表名;

修改表:

alter table 表名 add 列名 類型(長度) 約束; 		--修改表添加列. 
alter table 表名 modify 列名 類型(長度) 約束;	    --修改表修改列的類型長度及約束.
alter table 表名 change 舊列名 新列名 類型(長度) 約束;	   --修改表修改列名.
alter table 表名 drop 列名;					--修改表刪除列.
rename table 表名 to 新表名;					--修改表名
alter table 表名 character set 字符集;		--修改表的字符集

    3.插入記錄:insert

insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表1 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表2 --將表2中查出的數據插入表1
insert into 表1 values select * from 表2   --將表2中查出的數據插入表1

注意事項:

   ①列名數與values後面的值的個數相等

   ②列的順序與插入的值需要順序一致

   ③列名的類型與插入的值的類型需要一致.

   ④插入值的時候不能超過最大長度.

   ⑤值如果是字符串或者日期需要加引號’’ (一般是單引號)

    4.更新記錄:update

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;

注意事項:

    ①列名的類型與修改的值要一致.

    ②修改值得時候不能超過最大長度.

    ③值如果是字符串或者日期需要加單引號.

5.刪除記錄:delete

delete from 表名;
delete from 表名 where 條件;

注:delete與truncate的區別:

刪除表中所有記錄使用delete from 表名; 還是用truncate table 表名;
刪除方式:delete 一條一條刪除,不清空auto_increment記錄數。
truncate 直接將表刪除,重新建表,auto_increment將置爲零,從新開始。
所以truncate的效率更高i,特別是對於數據量特別大的表

三、SQL查詢

1.簡單查詢

查詢關鍵字:select   from  

如果需去除重複值 在列名前使用distinct 即可 :select distinct username from user

2.條件查詢

關鍵字:where

select * from user where age > 25;

select * from user where name = '狗蛋';

注:where後條件使用方法

 

比較運算符 >  <  <=   >=   =  <> 大於、小於、大於(小於)等於、不等於
BETWEEN  ...AND... 顯示在某一區間的值(含頭含尾)
IN(.....) 顯示在in列表中的值,例:in(1,2,3,4,5,100)
LIKE '李_' 模糊查詢,Like語句中,% 代表零個或多個任意字符,_ 代表一個字符,例:name like ‘_a%’;
IS NULL 判斷是否爲空
邏輯運算符 and 多個條件同時成立
or 多個條件任一成立
not 不成立

3.排序

關鍵字:order by   asc(升序)    desc(降序)

select * from user order by age desc;

4.聚合函數

特點:只對單列進行操作

常用的聚合函數:

sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素個數

5.分組

關鍵字:group by  having

注意:

    ①select語句中的列(非聚合函數列),必須出現在group by子句中

    ②group by子句中的列,不一定要出現在select語句中

    ③聚合函數只能出現select語句中或者having語句中,一定不能出現在where語句中。

6.多表關聯查詢

①內連接:inner join 

內連接也叫等值連接,內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。

select * from A inner join B on A.id = B.id

②外連接

  • 左外連接:left join 

select * from A left join B on A.id = B.id

  • 右外連接:right join

select * from A right join B on A.id = B.id

  • 全外連接MySQL不支持

注意:

通過業務需求,分析主從表
如果使用LEFT JOIN,則主表在它左邊
如果使用RIGHT JOIN,則主表在它右邊
查詢結果以主表爲主,從表記錄匹配不到,則補null

7.分頁查詢

關鍵字:limit

    select * from table limit (start-1)*rows,rows; 其中start是頁碼,rows是每頁顯示的條數。

8.語法順序和執行順序

  • MySQL查詢語法順序:

    ①SELECT

    ②FROM

    ③LEFT JOIN

    ④ON

    ⑤WHERE

    ⑥GROUP BY

    ⑦HAVING

    ⑧ORDER BY

    ⑨LIMIT

  • MySQL的執行順序:

    ①FROM(將最近的兩張表,進行笛卡爾積)---VT1

    ②ON(將VT1按照它的條件進行過濾)---VT2

    ③LEFT JOIN(保留左表的記錄)---VT3

    ④WHERE(過濾VT3中的記錄)--VT4…VTn

    ⑤GROUP BY(對VT4的記錄進行分組)---VT5

    ⑥HAVING(對VT5中的記錄進行過濾)---VT6

    ⑦SELECT(對VT6中的記錄,選取指定的列)--VT7

    ⑧ORDER BY(對VT7的記錄進行排序)--遊標

    ⑨LIMIT(對排序之後的值進行分頁)

  • where條件執行順序:

1.MySQL:從左往右執行where條件

2.Oracle:從右往左執行where條件

結論:在寫where條件時,優先級搞得部分要去編寫過濾力度最大的條件語句

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章