好比有三張表,student,teacher , project :sql
第一種方法:select * from student,teacher,project where student.id=teacher.sid and student.id=project.sid;函數
第二種:select * from student inner join teacher on student.id=teacher.sid inner join project on student.id=project.sid;spa
建立表:unix
CREATE table 表名 (ID int(11) AUTO_INCREMENT(主鍵自增), uname char(12) not null,sex char(2) null, PRIMARY KEY (id)(主鍵));code
該表名的sqlorm
rename table tbl_name(表名) to new_tbl_name(改後的表名)
添加字段
ALTER TABLE hel ADD hae varchar(20) ;
指定位置添加
ALTER TABLE hel ADD hae(新增字段) varchar(20) AFTER hahah(字段後)
//建立一個管理員表(id,admin_name,admin_pwd,admin_email,is_del)
create table admin
(
id
int(11) unsigned not null auto_increment comment '管理員id',
admin_name
varchar(30) not null comment '管理員名稱',
admin_pwd
char(32) not null comment '密碼',
admin_email
varchar(100) default null comment '郵箱',
is_del
tinyint(1) not null default '0' comment '是否刪除 1爲刪除 0正常',
primary key(id
),
key admin_name
(admin_name
))
engine=Innodb auto_increment=2 default charset=utf8 comment '管理員表';索引
//給admin表添加一個管理員手機號字段
alter TABLE admin
add admin_tel
char(11) default null comment '管理員手機號';ci
//給admin表添加一個管理員性別字段 指定位置在admin_name後
alter TABLE admin
add admin_sex
tinyint default '0' comment '管理員性別 0爲男 1爲女' after admin_name
;rem
//把admin表的admin_sex字段修改成sex
alter TABLE admin
change admin_sex
sex
tinyint(1) default '0' comment '管理員性別 0爲男 1爲女';字符串
//修改表名 把表名admin改成admin_user
alter table admin
rename admin_user
;
//group by
//查詢每一個班人數
select count(*),class_name from student GROUP BY class_name;
//查詢每一個班語文成績平均分
select avg(chinese),class_name from student GROUP BY class_name;
//查詢語文成績平均分大於90的班級
select avg(chinese)as c,class_name from student GROUP BY class_name HAVING c>=90;
//查詢英語成績平均分大於90的班級 倒序
select avg(English)as e,class_name from student GROUP BY class_name HAVING e>90 ORDER BY e desc;
//查詢英語成績平均分最低的班級
select avg(English)as e,class_name from student GROUP BY class_name ORDER BY e asc LIMIT 1;
//查詢每一個班英語成績最低分
select class_name,min(english) from student GROUP BY class_name;
//查詢每一個班英語成績最高分
select class_name,max(english) from student GROUP BY class_name;
//查詢英語成績平均分大於90班級的個數
select count(1) from (select class_name,avg(english)as e from student GROUP BY class_name HAVING e>90)as num;
必會
ddl:
一、create 建立庫、表
二、alter 修改表,包括建立、修改、字段和索引
三、group by 聚合查詢
四、distinct 結果集去重
五、union|union all合併結果集
多表聯合查詢:
一、多表關聯修改表記錄
update emp a, dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
二、多表關聯刪除表記錄
delete a,b from emp a, dept b where a.deptno=b.deptno and a.deptno=3;
三、把條件的內容用文字表達出來
select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;
經常使用函數
字符串函數
concat\insert\lower\upper\left\right\lpad\rpad\ltrim\rtrim\repeat\repleace\strcmp(比較ascii碼)\trim\substring\
數值函數
abs\ceil\floor\mod\rand\round(四捨五入)\truncate(不四捨五入)
日期和時間函數
curdate()\curtime()\now()\unix_timestamp()\from_unixtime()\week\year\hour\minute\monthname\date_format(date,fmt)\date_add()\datediff(expr,expr2)\
流程函數
select if(salary>2000, 'high', 'low') from salary;
select ifnull(salary, 0) from salary;
select case when salary<=2000 then 'low' else 'high' end as sal from salary;
select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;
瞭解: 試圖 存儲過程