成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL學(xué)習(xí)從這里出發(fā)!

adam1q84 / 1900人閱讀

摘要:聚合函數(shù)將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。計(jì)算個(gè)數(shù)一般選擇非空的列主鍵計(jì)算最大值計(jì)算最小值計(jì)算和計(jì)算平均值注意聚合函數(shù)的計(jì)算,排除值。

MySQL數(shù)據(jù)庫
開發(fā)學(xué)習(xí)中,想滿足一些需求,無疑需要經(jīng)常與數(shù)據(jù)打交道,例如,我們在使用IO的一些技術(shù)的時(shí)候,常常需要將一些數(shù)據(jù)存儲到外部文件,可能大家會問,我們初學(xué)的時(shí)候常常會簡單的保存一些數(shù)據(jù)到 .txt 文件中,為什么還需要數(shù)據(jù)庫呢?
(一) 為什么使用數(shù)據(jù)庫? (1) 查詢速度

假定我們將數(shù)據(jù)全部存儲在一個(gè)普通文件中(data.txt)_(以逗號間隔)

......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......

如果在我們的數(shù)據(jù)極為龐大的情況下,我們需要查詢其中的一些數(shù)據(jù),例如,查詢Eminem的國籍,我們一般會使用遍歷,但是毫無疑問,這個(gè)響應(yīng)時(shí)間會變得極其緩慢,但是使用數(shù)據(jù)庫后,它所提供的一些索引技術(shù)等就可以解決這樣的問題

(2) 保證數(shù)據(jù)完整有效
"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"

如果數(shù)據(jù)中出現(xiàn)了重名的情況,又如何判斷是不是同一個(gè)人呢?

如果data.txt文件中的數(shù)據(jù)被錯誤的修改,例如出生年份被修改為其他類型字符串這種無效表達(dá)怎么辦?

或許你可以在程序中寫一些邏輯判斷語句進(jìn)而篩選處理這些問題,但是仍舊在數(shù)據(jù)較為龐大的情況下,會出現(xiàn)各種各樣的問題,增加了開發(fā)者的開發(fā)難度,而數(shù)據(jù)庫本身就制定了一些約束,從而保證了數(shù)據(jù)的完整且,有效,從而使開發(fā)者只需要更加注重于程序本身的設(shè)計(jì),而不用花費(fèi)過多的時(shí)間去處理數(shù)據(jù)上的一些細(xì)節(jié)問題

(3) 數(shù)據(jù)共享

常用來簡單存儲數(shù)據(jù)的 txt/excel 等均屬于單一文件,并且都是無法共享的,只支持當(dāng)前用戶使用并且修改

數(shù)據(jù)庫允許用戶共享,不同的用戶可以同時(shí)存取數(shù)據(jù)庫中的數(shù)據(jù),用戶也可以用各種方式通過接口使用數(shù)據(jù)庫,并提供數(shù)據(jù)共享

(4) 數(shù)據(jù)的安全性

在我們前者中,數(shù)據(jù)的修改是很隨意的
但是在實(shí)際開發(fā)中,我們有時(shí)候需要面臨,多個(gè)用戶檢索、修改同一文件中的數(shù)據(jù),或者在并發(fā)情況下,寫同一文件或者記錄,而數(shù)據(jù)庫基于鎖等的一些技術(shù)便可以幫助我們解決這些問題

(5) 故障恢復(fù)

由于邏輯或者物理上的錯誤,導(dǎo)致了系統(tǒng)的錯誤操作,從而使得數(shù)據(jù)被皮懷,如何快速恢復(fù)數(shù)據(jù),我們上面的單一文件系統(tǒng)顯然無法幫助我們解決問題,而數(shù)據(jù)庫卻有相關(guān)機(jī)制去彌補(bǔ)、處理相關(guān)問題

上面我們僅僅從幾個(gè)常見的點(diǎn)分析了為什么使用數(shù)據(jù)庫,當(dāng)然遠(yuǎn)遠(yuǎn)不止這些,所以總的來說就是數(shù)據(jù)庫其特殊的存儲以及管理方式,既提高了效率,也極大的減少了開發(fā)人員的負(fù)擔(dān)

(二) 數(shù)據(jù)庫的基本概念 (1) 概述

數(shù)據(jù)庫(DateBase,簡稱DB)是一種用于存儲和管理數(shù)據(jù)的倉庫,簡單的說就是一個(gè)容器內(nèi),內(nèi)部按照一定方式存儲著一些數(shù)據(jù)

(2) 特點(diǎn)

持久化存儲數(shù)據(jù)的。其實(shí)數(shù)據(jù)庫就是一個(gè)文件系統(tǒng)

數(shù)據(jù)獨(dú)立存儲,且集中控制,方便存儲和管理數(shù)據(jù)

使用了統(tǒng)一的方式操作數(shù)據(jù)庫 -- SQL

實(shí)現(xiàn)數(shù)據(jù)共享

數(shù)據(jù)一致性和可維護(hù)性,保證數(shù)據(jù)安全可靠

(三) MySQL數(shù)據(jù)庫的基本操作
MySQL服務(wù)啟動(兩種方式)
    1. cmd--> services.msc 打開服務(wù)的窗口
    2. 使用管理員打開cmd
            A: net start mysql : 啟動mysql的服務(wù)
            B: net stop mysql : 關(guān)閉mysql服務(wù)

MySQL登錄
        1. 點(diǎn)擊 MySQL 5.7 Command Line Client,輸入密碼即可
        2. 命令行登錄(配置好環(huán)境變量)
            A: mysql -uroot -p密碼 //root為用戶名
            B: mysql -hip -uroot -p連接目標(biāo)的密碼
            C: mysql --host=ip --user=root --password=連接目標(biāo)的密碼
MySQL退出
        1. exit
        2. quit
(四) SQL簡單認(rèn)識 (1) 什么是SQL?

Structured Query Language:結(jié)構(gòu)化查詢語言

SQL就是訪問和處理關(guān)系數(shù)據(jù)庫的計(jì)算機(jī)標(biāo)準(zhǔn)語言,它定義了操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則

大部分?jǐn)?shù)據(jù)庫在SQL的標(biāo)準(zhǔn)上進(jìn)行了擴(kuò)展。而每一種數(shù)據(jù)庫操作的方式存在不一樣的地方,稱為方言。

但凡涉及到關(guān)系型數(shù)據(jù)庫就離不開SQL,例如在電商網(wǎng)站中存入商品信息,游戲中存儲裝備道具信息等

補(bǔ)充

常見的關(guān)系型數(shù)據(jù)庫Oracle、DB2、Microsoft SQL Server、Microsoft AccessMySQL

商用:Oracle、DB2、Microsoft SQL Server

開源:MySQL

桌面:Microsoft Access

常見的非關(guān)系型數(shù)據(jù)庫:NoSql、Cloudant、MongoDb、redis、HBase

(2) SQL通用語法
1. SQL語句 單行或多行書寫,以分號結(jié)尾,并且可以使用空格和縮進(jìn)來增強(qiáng)語句的可讀性
2. MySQL 數(shù)據(jù)庫的 SQL 語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
3. 3 種注釋
        A: 單行注釋: -- 注釋內(nèi)容 或 # 注釋內(nèi)容(mysql 特有) 
        B: 多行注釋: /* 注釋 */
(五) SQL分類

數(shù)據(jù)定義語言——DDL(Data Definition Language)

    允許用戶定義 (創(chuàng)建) 數(shù)據(jù)庫對象:數(shù)據(jù)庫,表,列等

數(shù)據(jù)操作語言——DML(Data Manipulation Language)

    允許用戶對數(shù)據(jù)庫中表的數(shù)據(jù)進(jìn)行增刪改

數(shù)據(jù)查詢語言——DQL(Data Query Language)

    允許用戶查詢數(shù)據(jù)庫中表的記錄(數(shù)據(jù))

數(shù)據(jù)控制語言——DCL(Data Control Language)

    用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別,及創(chuàng)建用戶
(1) DDL:操作數(shù)據(jù)庫、表
1. 操作數(shù)據(jù)庫 —— CRUE
-- CURE --->  C(Create):創(chuàng)建 + R(Retrieve):查詢 + U(Update):修改 + D(Delete):刪除

1. C(Create):創(chuàng)建
    -- 創(chuàng)建數(shù)據(jù)庫
        CREATE DATABASE 數(shù)據(jù)庫名稱;
    -- 創(chuàng)建數(shù)據(jù)庫,判斷不存在,再創(chuàng)建
        CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫名稱;
    -- 創(chuàng)建數(shù)據(jù)庫,并且制定字符集
        CREATE DATABASE 數(shù)據(jù)庫名稱 CHARACTER SET 字符集名;
        
2. R(Retrieve):查詢
    -- 查詢所有數(shù)據(jù)庫名稱
        SHOW DATABASES
    -- 查詢某個(gè)數(shù)據(jù)庫的字符集 : 查詢某個(gè)數(shù)據(jù)庫的創(chuàng)建語句
        SHOW CREATE DATABASE 數(shù)據(jù)庫名稱;

3. U(Update):修改
    -- 修改數(shù)據(jù)庫的字符集
        ALTER DATABASE 數(shù)據(jù)庫名稱 CHARACTER SET 字符集名稱;

4. D(Delete):刪除    
    -- 刪除數(shù)據(jù)庫
        DROP DATABASE 數(shù)據(jù)庫名稱;
    -- 判斷數(shù)據(jù)庫存在,存在再刪除
        DROP DATABASE IF EXISTS 數(shù)據(jù)庫名稱;

5. 使用數(shù)據(jù)庫
    -- 查詢當(dāng)前正在使用的數(shù)據(jù)庫名稱
        SELECT DATABASE();
    -- 使用數(shù)據(jù)庫
        USE 數(shù)據(jù)庫名稱;
2. 操作表
1. C(Create):創(chuàng)建
    -- 語法 * 注意最后一行不需要加逗號(,)
        CREATE TABLE 表名(
            列名1 數(shù)據(jù)類型1,
            列名2 數(shù)據(jù)類型2,
            ......
            列名n 數(shù)據(jù)類型n
        );

    -- 數(shù)據(jù)類型
        1. INT:整數(shù)類型
        2. DOUBLE:小數(shù)類型
        3. DATE:日期,只包含年月日,yyyy-MM-dd
        4. DATETIME:日期,包含年月日時(shí)分秒     yyyy-MM-dd HH:mm:ss
        5. TIMESTAMP:時(shí)間錯類型    包含年月日時(shí)分秒     yyyy-MM-dd HH:mm:ss    
        6. VARCHAR:字符串
    -- 注意:time如果將來不給這個(gè)字段賦值,或賦值為null,則默認(rèn)使用當(dāng)前的系統(tǒng)時(shí)間來自動賦值
    -- DOUBLE(6,3) 代表共保留6位數(shù)字,小數(shù)點(diǎn)后保留3位
    
    -- 復(fù)制表
        CREATE TABLE 表名 LIKE 被復(fù)制的表名;
        
2. R(Retrieve):查詢
    -- 查詢某個(gè)數(shù)據(jù)庫中所有的表名
        SHOW TABLES;
    -- 查詢表結(jié)構(gòu)
        DESC 表名;
        
3. U(Update):修改
    -- 修改表名
        ALTER TABLE 表名 RENAME TO 新表名
    -- 修改表的字符集
        ALTER TABLE 表名 CHARACTER SET 字符集名稱;
    -- 添加一列
        ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型
    -- 修改列名稱 類型
        ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類型;
        ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類型;
    -- 刪除列
        DROP TABLE 表名;
        DROP TABLE IF EXISTS 表名;
4. D(Delete):刪除    
        DROP TABLE 表名;
        Drop TABLE IF EXISTS 表名;
(2) DML:增刪改表中的數(shù)據(jù)
1. 表中添加數(shù)據(jù)
    -- 語法:
        INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);
    -- 注意:
        A: 列名和值要一一對應(yīng)。
        B: 如果表名后,不定義列名,則默認(rèn)給所有列添加值
            Eg:INSERT INTO 表名 Values(值1,值2,...值n);
        C: 除了數(shù)字類型,其他類型需要使用引號(單雙都可以)引起來

2. 刪除表中數(shù)據(jù)
    -- 語法:
        DELETE FROM 表名 [WHERE 條件]
    -- 注意:
        若不加條件,則刪除表中所有記錄
    -- 刪除所有記錄的兩種方式
        A: DELETE FROM 表名; -- 不推薦使用,有多少條記錄就會執(zhí)行多少次刪除操作
        B: TRUNCATE TABLE 表名; -- 推薦使用,先刪除表,然后再創(chuàng)建一張一樣的表,效率更高
        
3. 修改表中數(shù)據(jù)
    -- 語法:
        UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2,... [WHERE 條件];
    -- 注意:
        若不限定條件,則會修改表中的所有記錄
(3) DQL:查詢表中的記錄
SELECT * FROM 表名;

1. 語法:
    SELECT
        字段列表
    FROM
        表名列表
    WHERE
        條件列表
    GROUP BY
        分組字段
    HAVING
        分組之后的條件
    ORDER BY
        排序
    LIMIT
        分頁限定
2. 基礎(chǔ)查詢
    -- 多個(gè)字段的查詢
        SELECT 字段名1,字段名2... FROM 表名;
        注意:
            如果查詢所有字段,則可以使用*來替代字段列表。
    -- 去除重復(fù):
        DISTINCT
    -- 計(jì)算列
        一般可以使用四則運(yùn)算計(jì)算一些列的值。(一般只會進(jìn)行數(shù)值型的計(jì)算)
        IFNULL(表達(dá)式1,表達(dá)式2):null參與的運(yùn)算,計(jì)算結(jié)果都為null
            表達(dá)式1:哪個(gè)字段需要判斷是否為null
            如果該字段為null后的替換值。
    -- 起別名:
        as:as也可以省略
3. 條件查詢
    1. where子句后跟條件
    2. 運(yùn)算符
        > 、< 、<= 、>= 、= 、<>
        BETWEEN...AND  
        IN( 集合) 
        LIKE:模糊查詢
            占位符:
                _:單個(gè)任意字符
                %:多個(gè)任意字符
        IS NULL  
        AND  或 &&
        OR  或 || 
        NOT  或 !
        
            
            -- 查詢年齡不等于20歲
            SELECT * FROM student WHERE age != 20;
            SELECT * FROM student WHERE age <> 20;
            
            -- 查詢年齡大于等于20 小于等于30(三種方式)
            SELECT * FROM student WHERE age >= 20 &&  age <=30;
            SELECT * FROM student WHERE age >= 20 AND  age <=30;
            SELECT * FROM student WHERE age BETWEEN 20 AND 30;
            
            -- 查詢年齡22歲,18歲,25歲的信息
            SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
            SELECT * FROM student WHERE age IN (22,18,25);
            
            -- 查詢英語成績?yōu)閚ull
            -- 下面第一句是錯誤的,null值不能使用 = 和(!=) 判斷
            SELECT * FROM student WHERE english = NULL; (×)
            SELECT * FROM student WHERE english IS NULL; (√)
            
            -- 查詢英語成績不為null
            SELECT * FROM student WHERE english IS NOT NULL;
            
            -- 查詢姓張的有哪些? like
            SELECT * FROM student WHERE NAME LIKE "張%";
            
            -- 查詢姓名第二個(gè)是杰的人
            SELECT * FROM student WHERE NAME LIKE "_杰%";
            
            -- 查詢姓名是3個(gè)字的人
            SELECT * FROM student WHERE NAME LIKE "___";
            
            -- 查詢姓名中包含文的人
            SELECT * FROM student WHERE NAME LIKE "%文%";

DQL:查詢語句

1. 排序查詢
    -- 語法:
        ORDER BY 子句
        * ORDER BY 排序字段1 排序方式1 ,排序字段2 排序方式2...

    -- 排序方式:
        ASC:升序,默認(rèn)的。
        DESC:降序

    -- 注意:如果有多個(gè)排序條件,則當(dāng)前邊的條件值一樣時(shí),才會判斷第二條件。
2. 聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。
    COUNT:計(jì)算個(gè)數(shù)
        -- 一般選擇非空的列:主鍵
        -- count(*)
    MAX:計(jì)算最大值
    MIN:計(jì)算最小值
    SUM:計(jì)算和
    AVG:計(jì)算平均值
    
    -- 注意:聚合函數(shù)的計(jì)算,排除null值。
        解決方案:
            1. 選擇不包含非空的列進(jìn)行計(jì)算
            2. IFNULL函數(shù)
3. 分組查詢:
    -- 語法:
        group BY 分組字段;

    -- WHERE 和 HAVING 的區(qū)別?
        WHERE 在分組之前進(jìn)行限定,不滿足則不分組
        HAVING在分組之后進(jìn)行限定,不滿足則查不到
            
        WHERE 后不可以跟聚合函數(shù),having可以進(jìn)行聚合函數(shù)的判斷

    -- 常見舉例,鞏固一下語法

    -- 按照性別分組,分別查詢男、女同學(xué)的平均分
        SELECT sex , AVG(math) FROM student GROUP BY sex;
        
    -- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù)
        SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
        
    -- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于60分的人,不參與分組
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex;
        
    --  按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù) 
    --  要求:分?jǐn)?shù)低于60分的人,不參與分組或分組之后,人數(shù)要大于2個(gè)人
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex HAVING COUNT(id) > 2;
        
        SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 60 GROUP BY sex HAVING 人數(shù) > 2;
4. 分頁查詢
    -- 語法:
        limit 開始的索引,每頁查詢的條數(shù);
    -- 公式:
        開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
        每頁顯示5條記錄 

        SELECT * FROM student LIMIT 0,5; -- 第1頁
        SELECT * FROM student LIMIT 5,5; -- 第2頁
        SELECT * FROM student LIMIT 10,5;-- 第3頁

    -- LIMIT 是一個(gè)MySQL"方言"
結(jié)尾:

如果內(nèi)容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^

如果能幫到你的話,那就來關(guān)注我吧?。ㄏ盗形恼戮鶗诠娞柕谝粫r(shí)間更新)

在這里的我們素不相識,卻都在為了自己的夢而努力 ?

一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75623.html

相關(guān)文章

  • Python3 實(shí)現(xiàn)火車票查詢工具

    摘要:項(xiàng)目簡介使用抓取網(wǎng)站信息提供一個(gè)命令行的火車票查詢工具。項(xiàng)目由小蝸牛發(fā)布在實(shí)驗(yàn)樓,項(xiàng)目在線練習(xí)地址實(shí)現(xiàn)火車票查詢工具,可以直接在教程中下載代碼使用。命令行參數(shù)解析工具。 showImg(https://segmentfault.com/img/remote/1460000006767253);項(xiàng)目簡介:使用 Python3 抓取 12306 網(wǎng)站信息提供一個(gè)命令行的火車票查詢工具。通過...

    fuyi501 評論0 收藏0
  • 天真貝葉斯學(xué)習(xí)機(jī) | TiDB Hackathon 優(yōu)秀項(xiàng)目分享

    摘要:我們非常希望本屆誕生的優(yōu)秀項(xiàng)目能夠在社區(qū)中延續(xù)下去,感興趣的小伙伴們可以加入進(jìn)來哦本文作者是來自團(tuán)隊(duì)的楊文同學(xué),他們的項(xiàng)目天真貝葉斯學(xué)習(xí)機(jī)在本屆中獲得了三等獎最佳創(chuàng)意獎。比賽前一日從廣州南站出發(fā),次日抵達(dá)北京西站。 Ti Hack 系列 TiDB Hackathon 2018 共評選出六組優(yōu)秀項(xiàng)目,本系列文章將由這六組項(xiàng)目的成員主筆,分享他們的參賽經(jīng)驗(yàn)和成果。我們非常希望本屆 Hack...

    Anshiii 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<