mysql基础

一、基本语法

1、常用的类型

int :整型;

double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值:999.99

decimal:浮点型,不会出现精度缺失问题,比如金钱

char:固定长度字符串类型,最大长度:char(255)

varchar:可变长度字符串类型,最大长度:varchar(65535)

text(clob):字符串类型,存储超大文本

blob:字节类型,最大4G

date:日期类型;格式:yyyy-MM-dd

time:时间类型;格式:hh:mm:ss

timestamp:时间戳

datetime:

2、约束

默认值:default
非空约束:not null
唯一约束:unique
主键约束:primary key
外键约束:foreign key

3、创建数据表

CREATE TABLE [IF NOT EXISTS]表名(
    列名 列类型(长度) 约束 默认值,
    列名 列类型(长度) 约束 默认值,
);

4、显示检表语句

show create table users;

5、修改数据表结构

mysql> alter table users add(age int(4),birthday date);//添加字段
mysql> alter table users modify age float(4,1);//修改已有字段的数据类型
mysql> alter table users change pwd password varchar(30);//修改列的名字
mysql> alter table users drop birthday;//删除某列
//表重命名
mysql> alter table users rename to user2;
mysql> rename table user2 to user3;
mysql> drop table user3;//删除表
alter table stu drop primary key;//删除主键
alter table stu add primary key(sid);//添加主键

6、插入数据

insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。)
insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。),(值1,值2,值3.。。),....;//同时插入多行

7、修改数据

update 表名 set 列1=值1,列2=值2...[where 条件];

8、删除数据

delete from 表名[where 条件]

二、查询

1、条件查询

比较运算符:=,!=,<>,>,<,>=,<=
逻辑运算符:and ,or, not
范围:between and,in,not in
null:is null,is not null

2、查询顺序

select {columns}
from {table|view|other select}
[where 条件]
[group by 分组条件]
[having 分组后再限定]
[order by 排序]

3、查询语句

select 列1,列2,列3.。。 from 表名;//查询指定的列
select 列1 as 别名 from 表名;//起别名,as可以省略不写
select ename,(sal+comm) as 月入工资 from emp;//列运算
select ename,(sal+ifnull(comm,0)) from emp;//使用ifnull(a,b),如果a列为空,取b值
select concat('我的名字是',ename,',喔喔') from emp;//字符串类型做连续运算
select distinct job,deptno from emp;//去重distinct

4、模糊查询:like

not like 取反;

%:匹配0-多个任意的字符
_:匹配1个任意字符
like '_a';只有两个字符
like '%a%';包含a
like 'a%';以a 字母开头的

5、排序

asc:升序,默认
desc:降序
select查询完后,排序要写在整个sql语句的最后。

select * from emp order by sal;
select * from emp order by sal desc;

6、统计函数

也叫聚合函数,通常用于求整个表中某列的数据的:总和,平均值,最大值,最小值。通常不搭配表中的字段一起查询。
sum(), avg(), max(),min(), count(*/主键)

//求部门编号20中员工的平均工资,工资总和,工资最大值,最小值,人数。
select ename,sum(sal),avg(sal),max(sal),min(sal) ,count(empno),count(comm)from emp where deptno=20;

7、分组

group by 列名,按照指定的列进行分组,值相同的会分在一组。

select 列名1,列名2 from 表名 group by 列名1,列名2

7.2、分组后使用聚合函数

select sex,count(*) from stu group by sex;

7.3、二次筛选 having

就是分组后再对数据进行筛选,需要having子句来完成。

select 列名 from 表名 group by 列名 having 条件
//例子:查询部门人数超过5人的部门。
select deptno,count(*) from emp group by deptno having count(*) >5;

8、分页

limit是mysql特有的。方言。

limit用于限定查询结果的起始行,以及总行数

select * from 表名 limit start,count;
//例:查询起始行为第5行,一共查询3行
select * from stu limit 4,3;

三、多表联查

1、笛卡尔积

两张表在连接查询的时候,如果没有连接条件,那么会产生笛卡尔积(冗余数据)

select emp.*,dept.* from emp,dept

、内连接

方言:select * from 表1 别名1,表2 别名2 where 别名1.xx=别名2.xx
标准:select * from 表1 别名1 inner join 表2 别名2 on 别名1.xx=别名2.xx
//例:
select e.*,d.* from emp e inner join dept d on e.deptno=d.deptno;

3、左外链接

select * from 表1 别名1 left [outer] join 表2 别名2 on 别名1.xx=别名2.xx

4、右外链接

select * from 表1 别名1 right [outer] join 表2 别名2 on 别名1.xx=别名2.xx

例1:查询在部门在纽约的员工信息,部门名称,工资等级。

select 
e.*,d.dname,d.LOC,s.grade
FROM emp e
left join dept d
on e.deptno = d.deptno
LEFT JOIN salgrade s
on e.sal BETWEEN s.LOSAL and s.hisal
where d.LOC = 'NEW YORK';

例2:查询每个部门的人数,部门名称,部门编号。

SELECT e.DEPTNO,d.DNAME,count(*) from emp e 
LEFT JOIN dept d ON e.DEPTNO = d.DEPTNO
group by e.DEPTNO,d.DNAME;

select t.*,d.DNAME
from (
SELECT e.DEPTNO,count(*) from emp e group by e.DEPTNO
) t
left join dept d
on t.DEPTNO = d.DEPTNO;

5、自连接

查询员工的姓名和上级的姓名:

 select e.empno,e.ename,e.mgr,m.empno,m.ename from emp e,emp m where e.mgr=m.empno;

四、子查询

子查询:是指sql语句中包含另外一个select 语句。

子查询出现的位置:

from 后,作为表
where 后,作为条件

注意事项:
1,子查询必须在()里
2,在子查询中不能使用order by子句
3,子查询可以再嵌套子查询,最多不能超过255层
例1:查询比allen工资高的员工信息。

select * from emp where sal > (select sal from emp where ename='allen');

例2:查询员工信息,工资大于30部门的所有人

select * from emp where sal >(select max(sal) from emp where deptno=30);

例3:查询本公司工资最高的员工详细信息

select max(sal) from emp;
select * from emp e,dept d
 where sal=(select max(sa) from emp)  and e.deptno=d.deptno;

例子:
学生表:student(sno,sname,sage,ssex)
sno:学号,sname学生姓名,sage学生年龄,ssex学生性别
课程表:course(cno,cname,tno)
cno:课程编号,cname:课程名称,tno:教师编号
成绩表:sc(sno,cno,score)
sno:学号,cno:课程编号,score:课程成绩
教师表:teacher(tno,tname)
tno:教师编号,tname:教师姓名
1、查询姓“张”的教师的个数

SELECT count(*) FROM teacher where teacher.tname like'张%';

2、查询平均成绩大于60分的同学的学号和平均成绩

SELECT sno,avg(score) avg from sc group by sno having avg(score)>60;

3、查询同时学过课程编号为1和课程编号为2的同学的学号,学生姓名

select stu.sname,stu.sno from student stu 
INNER JOIN sc s on stu.sno =s.sno 
where s.cno in(1,2) 
GROUP BY stu.sname 
HAVING count(stu.sno)=2;

4、查询学过“李四”教师所教所有课程的所有同学的学号,学生姓名

SELECT stu.sno,stu.sname from teacher tea 
INNER JOIN course cou on tea.tno=cou.tno 
INNER JOIN sc s on s.cno=cou.cno 
INNER JOIN student stu on s.sno=stu.sno 
where tea.tname='李四';

5、查询至少有一门课程与学号为(sno)1的同学所学课程相同的同学的学号、姓名

SELECT stu.sno,stu.sname from sc s 
INNER JOIN student stu on stu.sno=s.sno 
WHERE s.cno in(SELECT cno from sc where sno=1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343