<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78, comments - 34, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    方老師今日講解數(shù)據(jù)庫入門,主要內(nèi)容是對(duì)數(shù)據(jù)庫操作的SQL語句,僅涉及單表操作。內(nèi)容雖然枯燥,但也學(xué)習(xí)了很多知識(shí)。

    什么是SQL?structred query language(結(jié)構(gòu)化查詢語言),在數(shù)據(jù)庫中它是通用的。我之前并未深入使用數(shù)據(jù)庫。對(duì)此還有些模糊,但今日的學(xué)習(xí)讓我有了深入了解。其實(shí)我也應(yīng)該早就想到,對(duì)數(shù)據(jù)的一些操作通過SQL語句就可以完成,程序直接拿結(jié)果就可以了。

    方老師以MySQL5.0數(shù)據(jù)庫,給我們做了講解。是為了下一課學(xué)習(xí)JDBC做準(zhǔn)備。前面的對(duì)數(shù)據(jù)庫的簡(jiǎn)介和MySQL5.0的安裝及配置,我就不寫出來了。下面是用戶、服務(wù)器、數(shù)據(jù)庫和表的關(guān)系圖:

    clip_image001

    在配置數(shù)據(jù)庫時(shí)選中:clip_image002,或手動(dòng)將MySQL安裝目錄添加到Windows環(huán)境變量Path中。使用控制臺(tái)連接MySQL數(shù)據(jù)庫:mysql –u 用戶名 –p 密碼。

    下面是常用的SQL語句,只針對(duì)單表使用,有關(guān)語句的具體信息請(qǐng)查詢MySQL的手冊(cè):

    一、數(shù)據(jù)庫相關(guān)SQL語句:

    1. 創(chuàng)建數(shù)據(jù)庫:
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

    其中create_specification是:

    [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
    例,創(chuàng)建一個(gè)名為“ccdb”,字符集為UTF-8的數(shù)據(jù)庫:
    create database ccdb character set utf8;
    clip_image003

    2. 查看、刪除數(shù)據(jù)庫:
    顯示數(shù)據(jù)庫:
    SHOW CREATE {DATABASE | SCHEMA} db_name
    例,查看服務(wù)器中所有的數(shù)據(jù)庫:
     clip_image004
    顯示數(shù)據(jù)庫創(chuàng)建語句:
    SHOW {DATABASES | SCHEMAS} [LIKE 'pattern']
    例,查看創(chuàng)建的“ccdb”數(shù)據(jù)庫的創(chuàng)建語句:
    clip_image005
    刪除數(shù)據(jù)庫:
    DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    例,刪除創(chuàng)建的數(shù)據(jù)庫“ccdb”:
    clip_image006

    3. 修改數(shù)據(jù)庫:
    ALTER {DATABASE | SCHEMA} [db_name] alter_specification [, alter_specification] ...
    其中alter_specification是:
    [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

    例,更改數(shù)據(jù)庫“ccdb”的字符編碼為“gbk”:

    clip_image008

    二、數(shù)據(jù)表相關(guān)SQL語句:

    1. 創(chuàng)建表:
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(] LIKE old_tbl_name [)];
    其中create_definition、table_options等,請(qǐng)查看手冊(cè)。
    例,在數(shù)據(jù)庫“ccdb”中創(chuàng)建一個(gè)“user”表:
    在創(chuàng)建表之前,必須選擇當(dāng)前庫。否則服務(wù)器不知道在哪個(gè)數(shù)據(jù)庫中創(chuàng)建表,或者當(dāng)前已經(jīng)有被選擇的其他數(shù)據(jù)庫,就會(huì)創(chuàng)建到別的庫。

    clip_image009

    clip_image010

     
    MySQL常用數(shù)據(jù)類型(拿方老師的,嘿嘿):
    分類
    數(shù)據(jù)類型
    說明
     
     
     
     
    數(shù)值類型
    BIT
    TINYINT [UNSIGNED] [ZEROFILL] 
    BOOL,BOOLEAN 
    SMALLINT [UNSIGNED] [ZEROFILL] 
    INT [UNSIGNED] [ZEROFILL] 
    BIGINT [UNSIGNED] [ZEROFILL] 
    FLOAT[(M,D)][UNSIGNED] [ZEROFILL] 
    DOUBLE[(M,D)][UNSIGNED] [ZEROFILL] 
    范圍為從1到64。
    帶符號(hào)的范圍是-128到127。無符號(hào)0到255。
    使用0或1表示真或假
    2的16次方
    2的32次方
    2的64次方
    M指定長(zhǎng)度,d指定小數(shù)位數(shù)
    表示比float精度更大的小數(shù)
     
     
    文本類型
    CHAR(size)
    VARCHAR(size)
    BLOB   LONGBLOB
    TEXT   LONGTEXT
    固定長(zhǎng)度字符串
    可變長(zhǎng)度字符串
    二進(jìn)制數(shù)據(jù)
    大文本
    時(shí)間日期
    DATE/DATETIME/TimeStamp
    日期類型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示時(shí)間戳,它可用于自動(dòng)記錄insert、update操作的時(shí)間
     

    2. 修改表:
    ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...

    其中alter_specification,請(qǐng)查看手冊(cè)。

    修改表“user”名為“userinfo”:
    clip_image011
    修改表“userinfo”的字符集為“gb2313”,并將字符集校對(duì)設(shè)置為與“gb2313”相應(yīng)的校對(duì):
    clip_image013
    可以在控制臺(tái)輸入:SHOW CHARACTER SET;,列出可用的字符集。也可以在手冊(cè)中查找“Character sets”,查找手冊(cè)中的字符集列表。
    可以在控制臺(tái)輸入:SHOW COLLATION LIKE 'gb%';,查看以gb開頭的所有字符集。
    先將表“userinfo”恢復(fù)名稱為“user”,查看表“user”:
    clip_image014
    查看表“user”的結(jié)構(gòu):
    clip_image015
    添加列“photo”:

    clip_image016

    修改列“sex”屬性-類型為“bit”:

    clip_image017

    修改列“email”名稱為“address”:

    clip_image018

    刪除列“address”:

    clip_image019

    3. 數(shù)據(jù)庫CURD語句:

    Insert語句:

    INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

    例,向“user”表中插入一條新數(shù)據(jù):

    clip_image021

    Update語句:

    UPDATE tbl_name  SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]

    例,將“sex”為1的人的“name”修改為“changcheng”:

    clip_image022

    clip_image023

    Delete語句:

    delete from tbl_name [WHERE where_definition]

    例,刪除剛才添加的新記錄:

    clip_image024

    如果沒有后邊的where條件,則刪除表中所有的數(shù)據(jù)。

    truncate table tbl_name;是刪除表,然后立即創(chuàng)建一個(gè)新表。

    clip_image025

    4. Select查詢語句(因?yàn)樗侵攸c(diǎn),所以單獨(dú)拿出來):

    1. 基本select語句:

    SELECT [DISTINCT] *|{column1, column2. column3..} FROM table;

    例,我們新創(chuàng)建了一個(gè)sutdent表,查看表中的所有記錄:

    clip_image026

    例,查詢表中所有學(xué)生姓名和他的數(shù)學(xué)成績(jī):

    clip_image027

    例,過濾表中的重復(fù)數(shù)據(jù)(distinct):

    clip_image028

    2. 在select語句中可使用表達(dá)式對(duì)查詢的列進(jìn)行運(yùn)算:

    SELECT *|{column1|expression, column2|expression,..} FROM table;

    例,將所有學(xué)習(xí)的數(shù)學(xué)加上10分:

    clip_image029

    例,統(tǒng)計(jì)學(xué)生的總分:

    clip_image030

    3. 在select語句中可使用as語句:

    SELECT column as 別名 from 表名;

    例,修改統(tǒng)計(jì)學(xué)生總分的列名:

    clip_image031

    4. 在select語句中加上where條件,進(jìn)行過濾查詢:

    例,查詢總分大于260分的學(xué)生:

    clip_image033

    5. where經(jīng)常使用的運(yùn)算符:

    比較運(yùn)算符

    > < <= >= = <>

    大于、小于、大于(小于)等于、不等于

    BETWEEN ...AND...

    顯示在某一區(qū)間的值

    IN(set)

    顯示在in列表中的值,例:in(100,200)

    LIKE ‘pattern’

    模糊查詢,Like語句中,% 代表零個(gè)或多個(gè)字符,_ 代表一個(gè)字符,例first_name like ‘_a%’;

    IS NULL

    判斷是否為空

    邏輯運(yùn)算符

    and

    多個(gè)條件同時(shí)成立

    or

    多個(gè)條件任一成立

    not

    不成立,例:where not(salary>100);

    例,查詢數(shù)學(xué)成績(jī)?cè)?0-90之間的學(xué)生:

    clip_image034

    例,查詢數(shù)據(jù)成績(jī)?yōu)?0、80、78的學(xué)生:

    clip_image036

    例,查詢所有名字以“a”開頭的學(xué)生的數(shù)學(xué)成績(jī):

    clip_image037

    6. 使用order by 子句排序查詢結(jié)果:

    SELECT column1, column2. column3.. FROM table order by column asc|desc

    clip_image039

    5. 合計(jì)函數(shù):

    1. Count返回滿足where子句條件的行的總數(shù):

    Select count(*)|count(列名) from tablename [WHERE where_definition]

    例,查詢共有多少學(xué)生:

    clip_image040

    例,查詢總分大于250分的人數(shù):

    clip_image041

    2. Sum函數(shù)返回滿足where條件的行的和:

    Select sum(列名){,sum(列名)…} from tablename [WHERE where_definition] 

    注意:sum僅對(duì)數(shù)值起作用,否則會(huì)報(bào)錯(cuò)。

    例,統(tǒng)計(jì)本班數(shù)學(xué)成績(jī)的平均分:

    clip_image042

    例,統(tǒng)計(jì)各科總成績(jī):

    clip_image043

    3. AVG函數(shù)返回滿足where條件的一列的平均值:

    Select avg(列名){,avg(列名)…} from tablename [WHERE where_definition] 

    例,求數(shù)學(xué)的平均分:

    clip_image044

    例,求總平均分:

    clip_image045

    4. Max/min函數(shù)返回滿足where條件的一列的最大/最小值:

    Select max(列名) from tablename [WHERE where_definition]

    例,查詢數(shù)學(xué)成線最高分和最低分:

    clip_image046

    6. 分組與過濾:

    1. 使用group by 子句對(duì)列進(jìn)行分組:

    SELECT column1, column2. column3.. FROM table group by column

    例,按照ID分組并對(duì)數(shù)據(jù)成績(jī)求和:

    clip_image047

    2. 使用having 子句過濾:

    SELECT column1, column2,column3 ... FROM table group by column having ...

    Having和where均可實(shí)現(xiàn)過濾,但在having可以使用合計(jì)函數(shù),having通常跟在group by后,它作用于組。

    例,按id分組,查詢數(shù)學(xué)成績(jī)組總和大于100的組:

    clip_image048

    例,查詢數(shù)據(jù)成績(jī)>=90的學(xué)生:

    clip_image049

    7. 時(shí)間日期相關(guān)函數(shù):

    ADDTIME (date2 ,time_interval )

    將time_interval加到date2

    CURRENT_DATE (  )

    當(dāng)前日期

    CURRENT_TIME (  )

    當(dāng)前時(shí)間

    CURRENT_TIMESTAMP ( )

    當(dāng)前時(shí)間戳

    DATE (datetime )

    返回datetime的日期部分

    DATE_ADD (date2 , INTERVAL d_value d_type )

    在date2中加上日期或時(shí)間

    DATE_SUB (date2 , INTERVAL d_value d_type )

    在date2上減去一個(gè)時(shí)間

    DATEDIFF (date1 ,date2 )

    兩個(gè)日期差

    NOW (  )

    當(dāng)前時(shí)間

    YEAR|Month|DATE (datetime )

    年月日

    8. 字符串相關(guān)函數(shù):

    CHARSET(str)

    返回字串字符集

    CONCAT (string2  [,... ])

    連接字串

    INSTR (string ,substring )

    返回substring在string中出現(xiàn)的位置,沒有返回0

    UCASE (string2 )

    轉(zhuǎn)換成大寫

    LCASE (string2 )

    轉(zhuǎn)換成小寫

    LEFT (string2 ,length )

    從string2中的左邊起取length個(gè)字符

    LENGTH (string )

    string長(zhǎng)度

    REPLACE (str ,search_str ,replace_str )

    在str中用replace_str替換search_str

    STRCMP (string1 ,string2 )

    逐字符比較兩字串大小,

    SUBSTRING (str , position  [,length ])

    從str的position開始,取length個(gè)字符

    LTRIM (string2 ) RTRIM (string2 )

    去除前端空格或后端空格

    9. 數(shù)學(xué)相關(guān)函數(shù):

    ABS (number2 )

    絕對(duì)值

    BIN (decimal_number )

    十進(jìn)制轉(zhuǎn)二進(jìn)制

    CEILING (number2 )

    向上取整

    CONV(number2,from_base,to_base)

    進(jìn)制轉(zhuǎn)換

    FLOOR (number2 )

    向下取整

    FORMAT (number,decimal_places )

    保留小數(shù)位數(shù)

    HEX (DecimalNumber )

    轉(zhuǎn)十六進(jìn)制

    LEAST (number , number2  [,..])

    求最小值

    MOD (numerator ,denominator )

    求余

    RAND([seed])

    RAND([seed])

    10. 定義表的約束:

    1. 定義主鍵:

    Primary key,在預(yù)定義主鍵的列后邊加上此屬性。

    例,創(chuàng)建student表時(shí),將id設(shè)為主鍵:

    clip_image050

    刪除、添加主鍵屬性:

    clip_image051

    2. 定義非空約束:

    not null,在預(yù)定義主鍵的列后邊加上此屬性:

    例,將name列設(shè)置為非空:

    clip_image052

    此時(shí),當(dāng)向表中添加新數(shù)據(jù)時(shí),name必須指定值。可以使用“is null”判斷某一記錄的值是否為空。

    3. 定義列值自動(dòng)增長(zhǎng):

    Auto_increment,在預(yù)定義主鍵的列后邊加上此屬性:

    例,定義id為主鍵且自動(dòng)增長(zhǎng):

    clip_image053

    4. 定義外鍵約束:

    這個(gè)是今天課程中,唯一涉及到兩個(gè)表的SQL語句操作。

    constraint ordersid_FK foreign key(ordersid) references orders(id),在預(yù)定義外鍵的列后邊加上此屬性:

    例,定義一個(gè)classes表,然后再定義一個(gè)students表:

    創(chuàng)建classes表:

    clip_image054

    創(chuàng)建students表:

    clip_image056

    當(dāng)向students表中添加一條記錄時(shí),如果指定的class_id值在classes表中不存在,添加就會(huì)失敗!如果對(duì)應(yīng)的classes表中的id值被修改了,那么也需要手動(dòng)修改students表中的class_id值。

    如果創(chuàng)建庫和表,以及對(duì)它們的操作過多的話,逐條手動(dòng)鍵入SQL語句是一件痛苦的事。SQL的腳本文件(*..sql)可以為我們解決這一難題。Sql文本文件中保存的是我們要手動(dòng)鍵入所有的SQL語句,使用source filename語句,導(dǎo)入sql腳本文件。比如:“source C:\test.sql”。

    OK,終于搞完了!也當(dāng)做練習(xí)了,不過是按照老方的PPT一步步來的,有點(diǎn)侵權(quán)的感覺。不過我想沒問題的,老方對(duì)此會(huì)很高興的。

    SQL語句本身并不復(fù)雜,做為程序員并不需要完全掌握數(shù)據(jù)庫。數(shù)據(jù)庫的優(yōu)化上全由DBA來做。我們需要掌握對(duì)數(shù)據(jù)庫的增、刪、改、查這些SQL語句即可!

    今日的課程沒有多深的理論與實(shí)踐,主要就是講解SQL語句。同學(xué)們學(xué)習(xí)效果很好!


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲人成欧美中文字幕| 亚洲人成无码久久电影网站| 亚洲精品视频免费观看| 日韩亚洲国产高清免费视频| 亚洲乱亚洲乱淫久久| 久久精品国产69国产精品亚洲| 午夜国产大片免费观看| 国产成人精品123区免费视频| 男女超爽刺激视频免费播放| 2020因为爱你带字幕免费观看全集 | 亚洲一区二区三区高清| 亚洲国产一区在线| 亚洲综合激情五月色一区| 久久亚洲国产最新网站| 亚洲变态另类一区二区三区| 综合偷自拍亚洲乱中文字幕| 深夜免费在线视频| 麻豆视频免费播放| 亚洲日韩在线观看| 亚洲AV无码国产一区二区三区| 九九免费精品视频在这里| 精品亚洲aⅴ在线观看| 亚洲成在人线电影天堂色| avtt天堂网手机版亚洲| 亚洲.国产.欧美一区二区三区| 久久精品国产亚洲AV无码娇色| 女人张开腿给人桶免费视频| 免费一级毛片一级毛片aa| 久久久久亚洲精品美女| 免费人成大片在线观看播放电影| 十八禁无码免费网站| 4338×亚洲全国最大色成网站| 亚洲人成在线播放网站岛国| 亚洲国产精品综合福利专区| 亚洲国产日韩女人aaaaaa毛片在线| 国产精品亚洲综合一区| 伊人久久精品亚洲午夜| 91麻豆精品国产自产在线观看亚洲 | 国产真人无码作爱免费视频| 亚洲AV无码一区二区三区DV | 亚洲av成人中文无码专区|