<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    方老師今日講解數據庫入門,主要內容是對數據庫操作的SQL語句,僅涉及單表操作。內容雖然枯燥,但也學習了很多知識。

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

    方老師以MySQL5.0數據庫,給我們做了講解。是為了下一課學習JDBC做準備。前面的對數據庫的簡介和MySQL5.0的安裝及配置,我就不寫出來了。下面是用戶、服務器、數據庫和表的關系圖:

    clip_image001

    在配置數據庫時選中:clip_image002,或手動將MySQL安裝目錄添加到Windows環境變量Path中。使用控制臺連接MySQL數據庫:mysql –u 用戶名 –p 密碼。

    下面是常用的SQL語句,只針對單表使用,有關語句的具體信息請查詢MySQL的手冊:

    一、數據庫相關SQL語句:

    1. 創建數據庫:
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

    其中create_specification是:

    [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
    例,創建一個名為“ccdb”,字符集為UTF-8的數據庫:
    create database ccdb character set utf8;
    clip_image003

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

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

    例,更改數據庫“ccdb”的字符編碼為“gbk”:

    clip_image008

    二、數據表相關SQL語句:

    1. 創建表:
    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等,請查看手冊。
    例,在數據庫“ccdb”中創建一個“user”表:
    在創建表之前,必須選擇當前庫。否則服務器不知道在哪個數據庫中創建表,或者當前已經有被選擇的其他數據庫,就會創建到別的庫。

    clip_image009

    clip_image010

     
    MySQL常用數據類型(拿方老師的,嘿嘿):
    分類
    數據類型
    說明
     
     
     
     
    數值類型
    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。
    帶符號的范圍是-128到127。無符號0到255。
    使用0或1表示真或假
    2的16次方
    2的32次方
    2的64次方
    M指定長度,d指定小數位數
    表示比float精度更大的小數
     
     
    文本類型
    CHAR(size)
    VARCHAR(size)
    BLOB   LONGBLOB
    TEXT   LONGTEXT
    固定長度字符串
    可變長度字符串
    二進制數據
    大文本
    時間日期
    DATE/DATETIME/TimeStamp
    日期類型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示時間戳,它可用于自動記錄insert、update操作的時間
     

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

    其中alter_specification,請查看手冊。

    修改表“user”名為“userinfo”:
    clip_image011
    修改表“userinfo”的字符集為“gb2313”,并將字符集校對設置為與“gb2313”相應的校對:
    clip_image013
    可以在控制臺輸入:SHOW CHARACTER SET;,列出可用的字符集。也可以在手冊中查找“Character sets”,查找手冊中的字符集列表。
    可以在控制臺輸入:SHOW COLLATION LIKE 'gb%';,查看以gb開頭的所有字符集。
    先將表“userinfo”恢復名稱為“user”,查看表“user”:
    clip_image014
    查看表“user”的結構:
    clip_image015
    添加列“photo”:

    clip_image016

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

    clip_image017

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

    clip_image018

    刪除列“address”:

    clip_image019

    3. 數據庫CURD語句:

    Insert語句:

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

    例,向“user”表中插入一條新數據:

    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條件,則刪除表中所有的數據。

    truncate table tbl_name;是刪除表,然后立即創建一個新表。

    clip_image025

    4. Select查詢語句(因為它是重點,所以單獨拿出來):

    1. 基本select語句:

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

    例,我們新創建了一個sutdent表,查看表中的所有記錄:

    clip_image026

    例,查詢表中所有學生姓名和他的數學成績:

    clip_image027

    例,過濾表中的重復數據(distinct):

    clip_image028

    2. 在select語句中可使用表達式對查詢的列進行運算:

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

    例,將所有學習的數學加上10分:

    clip_image029

    例,統計學生的總分:

    clip_image030

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

    SELECT column as 別名 from 表名;

    例,修改統計學生總分的列名:

    clip_image031

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

    例,查詢總分大于260分的學生:

    clip_image033

    5. where經常使用的運算符:

    比較運算符

    > < <= >= = <>

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

    BETWEEN ...AND...

    顯示在某一區間的值

    IN(set)

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

    LIKE ‘pattern’

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

    IS NULL

    判斷是否為空

    邏輯運算符

    and

    多個條件同時成立

    or

    多個條件任一成立

    not

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

    例,查詢數學成績在80-90之間的學生:

    clip_image034

    例,查詢數據成績為90、80、78的學生:

    clip_image036

    例,查詢所有名字以“a”開頭的學生的數學成績:

    clip_image037

    6. 使用order by 子句排序查詢結果:

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

    clip_image039

    5. 合計函數:

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

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

    例,查詢共有多少學生:

    clip_image040

    例,查詢總分大于250分的人數:

    clip_image041

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

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

    注意:sum僅對數值起作用,否則會報錯。

    例,統計本班數學成績的平均分:

    clip_image042

    例,統計各科總成績:

    clip_image043

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

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

    例,求數學的平均分:

    clip_image044

    例,求總平均分:

    clip_image045

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

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

    例,查詢數學成線最高分和最低分:

    clip_image046

    6. 分組與過濾:

    1. 使用group by 子句對列進行分組:

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

    例,按照ID分組并對數據成績求和:

    clip_image047

    2. 使用having 子句過濾:

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

    Having和where均可實現過濾,但在having可以使用合計函數,having通常跟在group by后,它作用于組。

    例,按id分組,查詢數學成績組總和大于100的組:

    clip_image048

    例,查詢數據成績>=90的學生:

    clip_image049

    7. 時間日期相關函數:

    ADDTIME (date2 ,time_interval )

    將time_interval加到date2

    CURRENT_DATE (  )

    當前日期

    CURRENT_TIME (  )

    當前時間

    CURRENT_TIMESTAMP ( )

    當前時間戳

    DATE (datetime )

    返回datetime的日期部分

    DATE_ADD (date2 , INTERVAL d_value d_type )

    在date2中加上日期或時間

    DATE_SUB (date2 , INTERVAL d_value d_type )

    在date2上減去一個時間

    DATEDIFF (date1 ,date2 )

    兩個日期差

    NOW (  )

    當前時間

    YEAR|Month|DATE (datetime )

    年月日

    8. 字符串相關函數:

    CHARSET(str)

    返回字串字符集

    CONCAT (string2  [,... ])

    連接字串

    INSTR (string ,substring )

    返回substring在string中出現的位置,沒有返回0

    UCASE (string2 )

    轉換成大寫

    LCASE (string2 )

    轉換成小寫

    LEFT (string2 ,length )

    從string2中的左邊起取length個字符

    LENGTH (string )

    string長度

    REPLACE (str ,search_str ,replace_str )

    在str中用replace_str替換search_str

    STRCMP (string1 ,string2 )

    逐字符比較兩字串大小,

    SUBSTRING (str , position  [,length ])

    從str的position開始,取length個字符

    LTRIM (string2 ) RTRIM (string2 )

    去除前端空格或后端空格

    9. 數學相關函數:

    ABS (number2 )

    絕對值

    BIN (decimal_number )

    十進制轉二進制

    CEILING (number2 )

    向上取整

    CONV(number2,from_base,to_base)

    進制轉換

    FLOOR (number2 )

    向下取整

    FORMAT (number,decimal_places )

    保留小數位數

    HEX (DecimalNumber )

    轉十六進制

    LEAST (number , number2  [,..])

    求最小值

    MOD (numerator ,denominator )

    求余

    RAND([seed])

    RAND([seed])

    10. 定義表的約束:

    1. 定義主鍵:

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

    例,創建student表時,將id設為主鍵:

    clip_image050

    刪除、添加主鍵屬性:

    clip_image051

    2. 定義非空約束:

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

    例,將name列設置為非空:

    clip_image052

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

    3. 定義列值自動增長:

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

    例,定義id為主鍵且自動增長:

    clip_image053

    4. 定義外鍵約束:

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

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

    例,定義一個classes表,然后再定義一個students表:

    創建classes表:

    clip_image054

    創建students表:

    clip_image056

    當向students表中添加一條記錄時,如果指定的class_id值在classes表中不存在,添加就會失敗!如果對應的classes表中的id值被修改了,那么也需要手動修改students表中的class_id值。

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

    OK,終于搞完了!也當做練習了,不過是按照老方的PPT一步步來的,有點侵權的感覺。不過我想沒問題的,老方對此會很高興的。

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

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: vvvv99日韩精品亚洲| 美女黄网站人色视频免费国产 | 国产一区视频在线免费观看| 亚洲偷自精品三十六区| 成视频年人黄网站免费视频| 亚洲一区二区三区在线| 亚洲精品乱码久久久久久久久久久久| 免费一区二区三区在线视频| 免费人成网站在线播放| h片在线观看免费| 亚洲av无码不卡| sihu国产精品永久免费| 亚洲午夜国产精品无码| 无码午夜成人1000部免费视频| 久久亚洲美女精品国产精品| 久久精品免费视频观看| 亚洲天堂福利视频| 国产成人在线观看免费网站| 日韩在线视频免费| 久久亚洲国产成人精品性色| 无码专区永久免费AV网站| 美女羞羞视频免费网站| 亚洲午夜久久久久久久久电影网| 最近2019免费中文字幕视频三| 久久亚洲精品专区蓝色区| 免费欧洲美女牲交视频| 有色视频在线观看免费高清在线直播 | 国产精品hd免费观看| 亚洲网站在线播放| 在线A级毛片无码免费真人| eeuss草民免费| 久久亚洲私人国产精品vA| 日本牲交大片免费观看| 成在人线av无码免费高潮喷水| 亚洲欧洲另类春色校园小说| 国产精品成人四虎免费视频| 成人性生交大片免费看中文| 亚洲人成网亚洲欧洲无码| 伊伊人成亚洲综合人网7777| 久久久久久久91精品免费观看| 免费无遮挡无遮羞在线看|