1. 程式人生 > >數據庫基礎語句學習

數據庫基礎語句學習

右連接 自然連接 data incr 圖片 約束 建立 記錄 保存

                  在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之後,把查詢的結果當成一個新表。

                           

                                        

                  

                  

                  

  

                  

                  

                  

                  

                  

                  

數據庫基礎語句學習