資料庫基礎語句學習
在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
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之後,把查詢的結果當成一個新表。