• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            基本SQL語句

            Posted on 2008-08-12 15:54 Prayer 閱讀(286) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫,SQL
            有關數據庫的一寫操作:
            創建表項就不說了.
            CREATE TABLE Student
            (Sno CHAR(5) NOT NULL UNIQUE,
            Sname CHAR(20),
            Ssex CHAR(1),
            Sage INT,
            Sdept CHAR(15));
            插入記錄:
            insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
            刪除記錄:
            delete from Student where Sno = 'aaa';
            注:只需要刪除一個主鍵就可以了。其他的記錄會相應的刪除掉。
            刪除表中一個字段:
            ALTER TABLE Student DROP column Ssex; 列名;
            修改表中的那一行數據:
            原來的記錄:
            Sno Sname Ssex Sdept
            aaa mary f 172
            update Student set Sname='mary1', Ssex='m' where Sno='aaa';
            修改后:
            Sno Sname Ssex Sdept
            aaa mary1 m 172


            desc倒敘排列:
            建立索引:
            create unique index Sno on Student(Sno);
            索引的一點好處:在查詢時候比較方便,在存在的所有記錄中查找一個Sno=1的時候!建立索引的表中就直接查找Sno項比較它是否=1找到后查相關的記錄就比較快。沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比較其值=1的相關記錄。

            默認是ASC。
            按表中哪個字段倒敘排序:
            select * from Student order by Sno desc;
            注意:要排序的字段必須是int型。

            設置成自增長的字段在插入數據的時候不需要插入該字段的值:
            select * from Student order by Sno desc;
            原來沒有設置成自增長插入數據命令:
            insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
            將int型的Sno字段設置成自增長后
            insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
            insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');
            insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');
            insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');

            在表中的排序如下:
            Sno Sname Ssex Sdept
            1 mary1 f 172
            2 mar1y f 172
            3 ma1ry f 172
            4 m1ary f 172
            /*********************************************************************************
            2006.7.20
            *********************************************************************************/
            查詢表中記錄總數:(無字段名字)
            select count() from usertable;
            或:(userid 為字段名字,結果是字段的總行數)
            select count(*) userid from Student;

            查詢字段的平均值:
            selecet avg(Sno) from Student;
            select avg(字段名)from 表名;

            給出查詢的字段的平均值取別名:
            select avg(字段名) as (別名) from (表名);

            查找指定的字段的其他字段
            select Sdept,Ssex,Sname
            from Student
            where Sno=3;
            (where Sname='mary1';或則where Sname like 'mary1';)

            在between語句查詢的都是在and之間的所有值而IN語句則必須是in括號里面的值.
            select Sno,Ssex,Sname from Student where Sdept between 180 and 190;

            select Sno,Ssex,Sname from Student where Sdept in (172,190);


            查詢Student表中的所有的名字中的Sno和Ssex值.
            select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';
            注:%%之間是把所有的String類型的值




            like和where條件查詢
            select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;

            查詢Student表中的所有的名字中間有mary的所有名字對應的的Sno和Ssex值.
            select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
            注:mary1,1mary,marydsajdh,等.

            注意:and or not 用的時候,and是用在連接并列條件的2個不同的字段
            or是用在選擇的2個不同的字段之間,not一般用于not in(180,190)之間.
            order by 和asc|desc的一點不同:
            order by是按先進先排,desc是先進后排,asc和desc是排列順序不一樣.




            disctinct條件查詢
            distinct 這個關鍵字來過濾掉多余的重復記錄只保留一條,

            select distinct name from table 表示將返回table表中name字段不重復的所有字段的集合。

            注:distinct必須放在開頭,select id distinct name from table 是錯誤的!

            -------------------------------------------------------------------------------------
            表TEST_1:
            id name1 name2
            9 aaa 11
            8 bbb 22
            3 ccc 33
            4 ccc 44
            5 bbb 55
            6 ddd 66
            7 eee 77
            -------------------------------------------------------------------------------------

            select distinct(name1) from test_1

            結果:
            name1
            aaa
            bbb
            ccc
            ddd
            eee
            distinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,即上表中只能返回name1字段的所有不重復記錄集合。

            -------------------------------------------------------------------------------------
            如果現在想查詢出表test_1中所有name1不重復的id和name1字段的記錄呢?

            select distinct name, id from table

            結果:
            name1 id
            aaa 9
            bbb 5
            bbb 8
            ccc 3
            ccc 4
            ddd 6
            eee 7

            并不是我們所想要的結果

            select distinct name,id from table 作用了兩個字段,也就是必須得id與name都相同的才會被排除,即返回去除table表中id和name兩個字段同時相同情況下所有集合。
            -------------------------------------------------------------------------------------

            如果現在想查詢出表test_1中所有name1不重復的所有字段的記錄呢?

            對于
            select * from test_1 where name1 in (select distinct name1 from tablename)
            等價于
            select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')
            我們很可能認為它是可行的,但實際上結果卻是:

            id name1 name2
            9 aaa 11
            8 bbb 22
            3 ccc 33
            4 ccc 44
            5 bbb 55
            6 ddd 66
            7 eee 77

            正確sql應該是:
            select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id

            min(id)或max(id)都行,order by id 可要可不要.這里用內連接實現聯合查詢,也可以用where語句

            select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id

            久久久久无码精品国产| 亚洲第一永久AV网站久久精品男人的天堂AV | 亚洲国产高清精品线久久| 久久精品免费一区二区| 97热久久免费频精品99| 久久精品亚洲日本波多野结衣| 囯产精品久久久久久久久蜜桃| 丰满少妇人妻久久久久久4| 无码人妻久久久一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 麻豆一区二区99久久久久| 伊人热热久久原色播放www| 99久久99久久精品国产片果冻 | 色综合久久中文字幕无码| 国产三级观看久久| 性欧美大战久久久久久久久| 精品久久久无码中文字幕| 精品久久一区二区| 久久亚洲AV成人出白浆无码国产| 好属妞这里只有精品久久| 少妇无套内谢久久久久| 久久99这里只有精品国产| 伊人久久精品线影院| 国产福利电影一区二区三区久久久久成人精品综合 | 久久ww精品w免费人成| 精品国产日韩久久亚洲| 久久九色综合九色99伊人| 久久久精品免费国产四虎| 国产精品99久久99久久久| 国产精品久久国产精麻豆99网站| 亚洲午夜福利精品久久 | 伊人久久大香线蕉亚洲 | 国产精品99久久久久久人| 7777精品久久久大香线蕉| 伊人久久亚洲综合影院| 午夜福利91久久福利| 久久强奷乱码老熟女网站| 久久精品国产99国产精品导航 | 国产99久久久国产精品~~牛| 日产精品久久久一区二区| 伊人久久精品无码av一区|