SQL語言基礎

一、數據庫概述

數據庫(DataBase,DB):指長期保存在計算機的存儲設備上,按照一定規則組織起來,可以被各種用戶或應用共享的數據集合。(文件系統)
數據庫管理系統(DataBase Management System,DBMS):指一種操作和管理數據庫的大型軟件,用於建立、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統訪問數據庫中的數據。

數據庫軟件應該爲數據庫管理系統,數據庫是通過數據庫管理系統創建和操作的。
數據庫:存儲、維護和管理數據的集合。

DB和DBMS之間的關係
DB和DBMS之間的關係

數據庫中一行記錄與對象之間的關係。
記錄與對象的關係
列:字段
行:一條記錄(實體)

二、sql概述

SQL:Structure Query Language。(結構化查詢語言)
SQL被美國國家標準局(ANSI)確定爲關係型數據庫語言的美國標準,後來被國際化標準組織(ISO)採納爲關係數據庫語言的國際標準。
各數據庫廠商都支持ISO的SQL標準。————普通話
各數據庫廠商在標準的基礎上做了自己的擴展。————方言

在SQL裏只有單引號,沒有雙引號的概念

三、sql的分類

  • DDL(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等; 【CREATE、 ALTER、DROP】
  • DML(Data Manipulation Language):數據操作語言,用來定義數據庫記錄(數據); 【INSERT、 UPDATE、 DELETE】
  • DQL(Data Query Language):數據查詢語言,用來查詢記錄(數據)。【SELECT】
  • DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別;

*注意:sql語句以;結尾
在mysql中,字符串類型和日期類型都要用單引號括起來。’tom’ ‘2015-09-04’
空值:null

3.1 DDL:操作數據庫、表、列等
使用的關鍵字:CREATE、 ALTER、 DROP

3.1.1操作數據庫
創建:
    create database mydb1;
查詢:
    查看當前數據庫服務器中的所有數據庫
        show databases;
    查看前面創建的mydb2數據庫的定義信息
        Show  create  database mydb2;
修改:
    查看服務器中的數據庫,並把mydb2的字符集修改爲utf8;
        alter database mydb2 character set utf8;
刪除  
    drop database mydb3;
其他:
    查看當前使用的數據庫
        select database();
    切換數據庫
        use mydb2;
3.1.2操作數據表
語法:
        create table 表名(
            字段1 字段類型,
            字段2 字段類型,
            ...
            字段n 字段類型
        );
常用數據類型:
            int:整型
            double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;
            char:固定長度字符串類型; char(10)  'abc       '
            varchar:可變長度字符串類型;varchar(10) 'abc'
            text:字符串類型;
            blob:字節類型;
            date:日期類型,格式爲:yyyy-MM-dd;
            time:時間類型,格式爲:hh:mm:ss
            timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss  會自動賦值
            datetime:日期時間類型 yyyy-MM-dd hh:mm:ss
查詢:
    當前數據庫中的所有表
        SHOW TABLES;
    查看錶的字段信息
        DESC employee;
修改:
    在上面員工表的基本上增加一個image列。
        ALTER TABLE employee ADD image blob;
    修改job列,使其長度爲60。
        ALTER TABLE employee MODIFY job varchar(60);
    表名改爲user。
        RENAME TABLE employee TO user;
    修改表的字符集爲gbk
        ALTER TABLE user CHARACTER SET gbk;
    列名name修改爲username
        ALTER TABLE user CHANGE name username varchar(100);
刪除:
    DROP TABLE user ;

3.2 DML操作

DML是對錶中的數據進行增、刪、改的操作。
INSERT 、UPDATE、 DELETE

3.2.1插入操作:INSERT
語法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);

注意:列名與列值的類型、個數、順序要一一對應。
    可以把列名當做java中的形參,把列值當做實參。
    值不要超出列定義的長度。
    如果插入空值,請使用null
    插入的日期和字符一樣,都使用引號括起來。
3.2.2修改操作:UPDATE
語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
3.2.3刪除操作:DELETE
語法 : DELETE FROM 表名 【WHERE 列名=值】

注意:DELETE 刪除表中的數據,表結構還在;刪除後的數據可以找回

TRUNCATE 刪除是把表直接DROP掉,然後再創建一個同樣的新表。
刪除的數據不能找回。執行速度比DELETE快。

3.3 DQL操作

數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端。
查詢返回的結果集是一張虛擬表。

查詢關鍵字:SELECT

語法: SELECT 列名 FROM 表名 
【WHERE --> GROUP BY -->HAVING--> ORDER BY】

語法:
    SELECT selection_list /*要查詢的列名稱*/
    FROM table_list /*要查詢的表名稱*/
    WHERE condition /*行條件*/
    GROUP BY grouping_columns /*對結果分組*/
    HAVING condition /*分組後的行條件*/
    ORDER BY sorting_columns /*對結果分組*/
    LIMIT offset_start, row_count /*結果限定*/
3.3.1條件查詢

在查詢時給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:

  • =、!=、<>、<、<=、>、>=;
  • BETWEEN…AND;
  • IN(set);
  • IS NULL; IS NOT NULL;
  • AND;
  • OR;
  • NOT;

3.3.2模糊查詢
當想查詢姓名中包含a字母的學生時就需要使用模糊查詢了。模糊查詢需要使用關鍵字LIKE。
通配符: 
        _ 任意一個字符
        %:任意0~n個字符

模糊查詢必須使用LIKE關鍵字。其中 “_”匹配任意一個字母,5個“_”表示5個任意字母。
'%張%'  '張_'
3.3.3字段控制查詢
去除重複記錄:兩行或兩行以上記錄中系列的上的數據都相同,需要使用DISTINCT
    SELECT DISTINCT sal FROM emp;

查看兩列(值類型)之和:直接做加運算
    SELECT *,sal+comm FROM emp;
如果某一列中的數據含有Null值,需要去掉Null值,因爲任何東西與NULL相加結果還是NULL,所以結算結果可能會出現NULL。下面使用了把NULL轉換成數值0的函數IFNULL:
    SELECT *,sal+IFNULL(comm,0) FROM emp;

給列名添加別名
    在上面查詢中出現列名爲sal+IFNULL(comm,0),這很不美觀,現在我們給這一列給出一個別名,爲total:
    SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
3.3.3排序
order by 列名 asc(默認) desc
3.3.4聚合函數
聚合函數自動濾null
聚合函數是用來做縱向運算的函數:
    COUNT():統計指定列不爲NULL的記錄行數;
    MAX():計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;
    MIN():計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;
    SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;
    AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;
3.3.5分組查詢

當需要分組查詢時需要使用GROUP BY子句
這裏寫圖片描述

注:凡和聚合函數同時出現的列名,一定要寫在group by 之後
這裏寫圖片描述

3.3.6 HAVING子句
查詢工資總和大於9000的部門編號以及工資和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 9000;

注:having與where的區別:
1.having是在分組後對數據進行過濾.
where是在分組前對數據進行過濾

2.having後面可以使用聚合函數(統計函數)
where後面不可以使用聚合函數。

WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那麼這行記錄不會參加分組;而HAVING是對分組後數據的約束。

3.3.6 LIMIT(只有MySQL裏有)

LIMIT用來限定查詢結果的起始行,以及總行數。

查詢5行記錄,起始行從0開始
    SELECT * FROM emp LIMIT 0, 5;

注意,起始行從0開始,即第一行開始!

查詢10行記錄,起始行從3開始
    SELECT * FROM emp LIMIT 3, 10;

查詢代碼的書寫順序和執行順序:
查詢語句書寫順序:select – from- where- group by- having- order by-limit
查詢語句執行順序:from - where -group by - having - select - order by-limit

DQL

發佈了140 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章