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