亂碼改格式: CHARSET=utf8;
創建資料庫:create database 資料庫名字
查看資料庫:show databases;
創建表:create table 名稱(id ind(50),name varchar(50),sex char(1),birthay datetime);
選中資料庫命令:use
int--表示整形 char--表示字符 varchar--表示字串 date--表示日期(年月日)
date--表示時間(年月日時分秒)
洗掉表--drop
修改表名--alter table (修1)rename (修2);
增加表欄位--alter table (表名)add(表欄位)int(50);
洗掉表欄位--alter table以 (表名)drop(表欄位);
修改表欄位--alter tale (表名)change name (修改的)varcahr(50);
插入資料(錄入資料)insert into (表名)(資料值)value(資料);
表約束:
主鍵(primary key):物理上儲存的順序
非空(not null):此欄位不允許填寫空值
唯一(unique):此欄位的字不允許重復
默認值:(default):當不填寫此值時會使用默認值,如果填寫時填寫為準
外鍵(foreign key):維護兩個表之間的關聯關系
加了約束和注釋的表創建:create table (表名)(id int(50)not null primary key comment{順序}“注釋”;
--查詢
select id,name,from student;--全表查詢;
用*是全表查詢(執行效率低),單欄位查詢(執行效率高)
條件查詢:
--需求一:查詢學號為111的學生資訊
select*from (表名)where(學號)=‘111’
--需求二:查詢一個叫老王的同學
select*from(表名)where(名字)=‘老王’
--需求三:查詢出姓王的同學(模糊查詢)
select*from(表名)where(名字)like“王%”;
--洗掉表資料
delete from (表名)where id=(洗掉項);
--修改表資料
update (表名)set name=‘修改的資料’where id=777;
select id AS‘學號’,name AS ‘姓名’,birthday AS‘出生日期’from(表名)AS s;
默認值
(表名)(欄位)default ()
條件查詢:
比較運算子:
等于:=
大于:>
大于等于:>=
小于:<
小于等于:<=
不等于:!=或<>
邏輯運算子:
and--并且
or--或者
not--非
模糊查詢:
like
%表示任意多個字符
_表示一個任意字符
查詢范圍:
in表示在一個非連續的范圍內
between...and...表示在一個連續的范圍內
空判斷:
注意:null與"是不同的
判空:is null
非判空:is not null
--需求將學生表里面的學生成績正序排列
--order by表示排序,默認是正序排,列名的后面加上desc之后是倒序排列
select*from student order by sccore;
--需求將學生表里面的雪上成績倒序排列
select*from student order by sccore desc;
--聚合函式
1,統計--count
2,平均--avg
3,最大值max
4,最小值min
5, 求和--sum
--統計學生表里面的人數
select count(id)from student;
--統計出及格的學生人數
select count(id)from student WHERE score>=60
--計算出學生表學生的平均分
select avg(socore)from student;
--聚合函式是不計算null的值
--找出年齡最大的學生
select id,name,{min年份}{max數字}(birthday)from student;
--計算表所有學生的總分
select sum(score)from student;
--找出大于平均分的學生
【select*from student where score>avg(score)--寫錯了】
--原則:where條件里面是不能寫聚合函式的
--子查詢
select*from student where score>(selest avg (score)from student);
--子查詢的一個運動
【select min(score)from student;--寫錯了】
--揪出成績最差的學生
select*from student where score=(select min(score)from student);
--查詢處查成績比李四要低的學生名字·學生成績·學生年齡
alter table student add sage int(50);
select name ‘學生姓名’,score‘學生成績’,sage‘學生年齡’from student where score<(select score from student where name=‘李四’)
表增加 資料:
update 表 set 欄位名=欄位名+。。。
分頁查詢:
公式(n-1)*m,m
select *from stydent limit(值,值);
--四舍五入(精確到小數點后一位)
select id,name,round,(height,0)from (表格名稱)where ID=(位置)t
--查詢男生中成績最差的學生資訊(注意此處的where sex=‘男’要寫在子查詢里面)
select*from student where score=(select min(score)from student where sex=‘男’);
--分組查詢
--統計出男生多少人,女生多少人?
select sex,count(*)from student group by sex;
--統計出各班的人數
select class,count(sid)from group by class;
--統計出各個小組的平均分
select class,avg(id)from student group by calss;
--找出平均分大于70分的班級
select class,avg(scrore) from student group by class having avg(scrore)>70;
where和having區別補充一,having只能用在group by之后,對分組后的結果進行篩選(即使用having的前提條件是分組)。
二,where肯定在group by之前。
三,where后的條件運算式里不允許使用聚合函式,而having可以
四,當一個查詢陳述句同時出現了where,group by,having,order by的時候,執行順序和撰寫順序是:
1.執行where xx對全表資料做篩選,回傳第1個結果集。
2.針對第1個結果集使用group by分組,回傳第2個結果集。
3.針對第2個結果集中的每1組資料執行select xx,有幾組就執行幾次,回傳第3個結果集。
4.針對第3個結集執行having xx進行篩選,回傳第4個結果集。
5.針對第4個結果集排序。
-- 創建商品分類表
CREATE TABLE category(
cid INT(20) PRIMARY KEY【主鍵】 COMMENT '分類id',
-- 分類id
cname VARCHAR(20) COMMENT '分類名稱'-- 分類名稱,) COMMENT = '分類表';
-- 創建商品表
CREATE TABLE product(
pid INT(20) PRIMARY KEY COMMENT '商品id',
-- 商品id
pname VARCHAR(20) COMMENT '商品名稱',
-- 商品名稱
price INT COMMENT '商品價格',
-- 商品價格
pdesc VARCHAR(40) COMMENT '商品描述',
-- 商品描述
cno INT COMMENT '商品類別' -- 商品類別
);
-- 給商品表(從表)添加一個外鍵
ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid);
多表洗掉是有講究的,不能隨便刪,不能先刪主表
只能先刪從表,后刪主表,或者兩張表一起刪(從表洗掉陳述句在前,主表洗掉陳述句在后)
DROP TABLE product;
DROP TABLE category;
-- 1,查詢出商品分類名稱和商品名稱的資料
-- 解題思路,兩張表合二為一,形成一張大表
SELECT * FROM category,product WHERE category.`cid`(欄位) = product.`cno`(欄位);
SELECT category.`cname` 分類名稱,product.`pname` 商品名稱 FROM category,
product WHERE category.`cid` = product.`cno`;
-- 內連接查詢
SELECT c.`cname` 分類名稱,p.`pname` 商品名稱 FROM category c,(欄位)
product p WHERE c.`cid` = p.`cno`;
-- 2,查詢手機數碼這個分類下的商品名稱
SELECT c.`cname` 分類名稱,p.`pname` 商品名稱 FROM category c,(欄位)
product p WHERE c.`cid` = p.`cno` AND c.`cname` = '手機數碼';
-- 3,統計出各個分類下的商品數量
SELECT c.`cname` 商品分類,COUNT(*) 商品數量 FROM category c,(欄位)
product p WHERE c.`cid` = p.`cno` GROUP BY c.cname;
.添加外鍵約束:alter table從表 add constraint
外鍵(fk_從表_主表)foreign key (從表外檢欄位)
references(主鍵欄位)
--主外鍵的作用:不是為了進行多表查詢,沒有主外鍵照樣可以連接起來多表查詢
那么主外鍵的作用是,主鍵為了保證資料的唯一性,外鍵為了資料的完整性(主表資料被從表參考,那么主表里面相關聯的資料不能隨意更改或洗掉)
連接查詢:
1,等值查詢
SELECT * FROM A,B WHERE A.CID = B.CID;
2,內連接查詢
SELECT * FROM A INNER JOIN B ON a.cid = B.cid
外連接查詢:
左外連接和右外連接
3,左外連接
SELECT * FROM A LEFT JOIN B ON a.cid = B.cid
內連接查詢和左外連接查詢的區別:
-- 內連接查詢出分類名稱里面的商品 -- 內連接:沒有關聯的資料不顯示
SELECT * FROM category c INNER JOIN product p ON c.cid = p.cno
-- 左外連接查詢出分類名稱里面的商品 --左外連接:沒有關聯的資料也會顯示,右表沒有值的資料用null表示.
SELECT * FROM category c LEFT JOIN product p ON c.cid = p.cno
uj5u.com熱心網友回復:
句句帶分號,你這是mysql陳述句?uj5u.com熱心網友回復:
很基礎,很詳細,很好轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/31040.html
標籤:數據庫相關
上一篇:substr 在sas 和hive 環境下的使用的不同
下一篇:Google三大論文讀后感
