1. 程式人生 > >資料庫基礎語句學習

資料庫基礎語句學習

                  在sql語句中所有的日期型別和字串型別都要用單引號( '' )括起來

1、    DDL(資料定義語言):  create  database  my_test;  //建立一個my_test資料庫。

                  use  my_test;       //使用my_test資料庫。

                  create  table  students  ( id int(10) , name varchar(20) );  //建立一個帶 id name 兩個欄位的students表。

                  drop table students;    //刪除表students

                  rename table students to student;    //將表名students改為student

                  show tables;   //檢視所有表

                  desc students;   //查看錶students的所有欄位

                  alter table students add gender varchar(20);  //給表students建立一個型別為varchar(20)的欄位gender

                  alter table students drop

 gender;    //刪除表students的gender欄位

                  alter table students modify gender varchar(10);  //將欄位gender的型別varchar(10)修改為varchar(20)

                  alter table students change name newname varchar(10);  //將欄位name修改為型別為varchar(10)的欄位newname

 

 

2、    DML(資料操作語言):  insert into students (id ,name ,gender) values (1, 'zs', '男') , (2, 'lili', '女');  //在表students中插入兩條資料,欄位和資料的順序必須一致

                  delete from students where name='zs';    //刪除name為zs的一條資料

                  delete from students;   //刪除表students的資料 (資料可以找回)

                  truncate table students;    //刪除表students的資料,重新建立一張表 (資料不能找回)

                  select * from students;    //查詢表students中的所有資料

                  update students set name = ww;    //將name全改為ww

                  update students set name=zs , gender='男' where id=2;    //將id為2的name跟新為zs gender跟新為男

                                    修改資料庫密碼

                  use mysql;  //(進入mysql資料庫)

                  show tables;

                  desc user;  (檢視有沒有password欄位,如果有)

                  update user set password = password('1234')  where user = 'root';

                  flush privileges;    // 重新整理MySQL系統許可權相關表(很重要)

 

3、   DQL(資料查詢語言):   通過查詢語句查詢出來的資料以表的形式展示,我們稱這個表為虛擬結果集,存放在記憶體中。結果集為一張虛擬表。

                  DQL語句不會對資料進行改變,而是讓資料庫傳送結果集給客戶端。

                  select * from students;  //查詢表students所有的資料。*表示所有欄位,*也可以換成別的欄位

                  select id,name from students;  //查詢表students中的id,name欄位的資料。

                  select * from students where gender='男' and/or age=25;  //and表示且,or表示或者

                  select * from students where id in(1,2,3);     //in(set) set固定值查詢  

                                    模糊查詢  一個_代表一個字元 %代表任意字元

                  select * from students where name like '_';   //模糊查詢,查詢名字有_個數的字元的資料

                  select * from students where name like '%s%';  //查詢名字帶有s的名字的資料

 

                  select distinct name from students;    //  distinct去掉重複的,將students表中重複的name去掉後輸出name欄位資料

                  select *, ifnull (id,0)+ifnull (score,0) as total from students;  //將兩個數值型欄位id和score加一起變成一個total欄位(as表示起別名,as可以省略

                                          

                        (排序) select * from students order by salary asc/desc,id asc/desc; //根據salary的大小進行 升/降 序排列,如果salary一樣,則根據id的大小升/降排列

            (聚合函式) select count(*) from students (where salary>2500);  //count 查詢表中記錄數 (統計salary大於2500的記錄數) (統計不為null的記錄行數

                  select sum(salary) ,sum(manage) from students;    //求和

                  select avg(salary) from students;    //求平均值

                  select max(salary) , min(salary) from students;  //最大最小值

 

           (分組查詢) select gender, group_concat(name) from students group by gender;  //根據gender分組並把每組的name顯示出來

                  select  depatment , group_concat(salary) , count(*)  from  tudents  where  salary > 1500  group by depatment; //查詢每個depatment中salary大於1500的個數

                  select depatment , group_concat(salary) ,sum(salary) from students group by depatment having sum(salary) >= 9000; //having作用與where一樣,但只能用與group by 之後

                  select depatment , grop_concat(salary) , sum(salary)  from  students  where  salary > 2000 group by  depatment  having  sum(salary) > 6000  order  by

                  -----  sum(salary)  asc/desc; //查詢salary大於2000,工資總和大於6000的部門的工資和 並按降/升 序排列。( where  >  group  by  >  having  >  order  by >  limit )

 

4、資料的完整性:  保證使用者輸入的資料儲存到資料庫中是正確的。 在建立表是給表新增約束。 完整性分為:實體完整性、域完整性、引用完整性。

    4.1、  實體完整性:   概念:  一條資料為一個實體。

                作用:  標識每一行資料不重複,行級約束

                約束型別:  主鍵約束、唯一約束、自動增長約束

                    主鍵約束(primary  key):每個表中有一個主鍵,資料唯一且不能為null

                                新增方式:<1> create table person ( id  bigint primary key, name varchar(20) );

                                     <2> create table person ( id bigint, name varchar(20), primary key ( id )  );

                                     <3> create  table  person  ( id bigint  ,  xuehao  int ( 10 ) ,  name  varchar(20) , primary  key ( id ,xuehao) );   //(聯合主鍵)

                    唯一約束(unique):資料不能重複,但可以為null

                                新增方式:  create table person (  id  bigint primary key,name varchar(20) unique );

                    自動增長列(auto  increment):指定列的資料自動增長,即使資料刪除,還是從刪除的資料繼續往下

                                新增方式:  create table person (  id bigint primary key auto_increment,name varchar(20) unique);

    4、2  域完整性:  使用:限制此單元格的資料正確,不對照此列的其他單元格比較。域代表當前單元格。

               與完整性約束:<1>:資料型別:數值型別,字串型別,日期型別

                      <2>:非空約束(no  null):create table person  (  id int primary key auto_increment, name varchar(20) unique not null );

                      <3>:預設值約束(default):create  table  person( id  int  primary  key  auto_increment , name  varchar(20)  unique , gender  varchar(10)  default  '男' );

    4、3  參照完整性:  概念:表與表之間的一種對應關係,通過設定兩表之間的主鍵、外來鍵關係,或編寫兩表之間的觸發器來實現。

        表與表建立關係的條件:量表必須都是InnoDB型別、資料庫的主鍵和外來鍵的型別必須要一致

 

5、多表查詢:  5、1  <1>   一對一、一對多、多對多(要建立一箇中間表)給中間表的兩個欄位都插入外來鍵建立關係表。

                              

            <2>   為什麼要拆分表:  避免大量冗餘資料的出現。

        5、2 多表查詢: 5.2.1 合併結果集:   <1> 合併結果集: 把兩個select語句的查詢結果合併在一起

                            <2> 方式: 1、 union:合併時去除重複記錄。  2、union all:合併時不去重

                            <3> 用法: select * from a union ( all ) select * from b; 

                            <4> 注意事項:被合併的兩個結果:列數、列型別必須相同。

                 5.2.2 連線查詢:     概念:也叫跨表查詢,需要關聯多個表進行查詢。

                            笛卡爾集:

                            多表聯查,保證資料正確:在查詢時要把主鍵和外來鍵保持一致。  :  select * from stu st ,teach tc where st.id=tc.sid;

                            根據連線方式:<1> 內連線: 等值連線 : select * from stu st ( inner ) join teach tc on st.id=tc.sid;

                                   <2> 外連線  左連線:左邊的資料全查出來 left (outer) join on

                                           右連線:右邊的資料全查出來 right (outer) join on

                                   <3> 自然連線(natural):不用寫條件;要求:兩張連線的表中列名稱和型別完全一致的列作為條件。(會去除相同的列)

                                                select * from stu natural join score;

 

6、子查詢:    概念:  一個select語句中包含另一個完整的select語句;或兩個以上select,那麼就是子查詢語句了。

        子查詢出現的位置:<1> where之後,把select查詢出來的結果當成另一個select的條件值。

                    select ename,salary from emp where deptno=( select deptno from emp where ename='項羽' );

                 <2> from之後,把查詢的結果當成一個新表。