1、mysql之select

一、单表查询

数据查询命令:select 字段1(可以对字段进行加减乘除),字段2...... from 表 where 限制条件1 and/or 限制条件1......

如:SELECT sal+100 FROM test_job

slelect 运算符:

+     -     *     /     ==     !=     <>     >=     <=

通配符:

%表示多个字符     _表示一个字符     *表示所有

与或非:

SELECT * FROM test_emp WHERE empno=20162001 AND ename="董事长"

SELECT * FROM test_emp WHERE empno=20165001 OR ename="董事长"

SELECT * FROM test_emp WHERE NOT empno=20161001

在两则之间

SELECT * FROM test_emp WHERE empno BETWEEN 20162001 AND 20164001

SELECT * FROM test_emp WHERE empno>=20162001 AND empno<=20164001

like 匹配一个字符模式,通配符%代表若干个字符,通配符_代表一个字符

SELECT * FROM test_emp WHERE empno LIKE "2016%001"

SELECT * FROM test_emp WHERE empno LIKE "2016_001"

in 匹配列出的值

SELECT * FROM test_emp WHERE empno IN(20161001,20162001)

is null 匹配空格

SELECT * FROM test_emp WHERE mgr IS NULL

distinct 去重复

SELECT deptno FROM test_emp

SELECT DISTINCT deptno FROM test_emp

设置别名 AS

SELECT empno 员工号,ename 姓名,hiredate 入职日期,deptno 部门号 FROM test_emp

SELECT empno AS 员工号,ename AS 姓名,hiredate AS 入职日期,deptno AS 部门号 FROM test_emp

order by 根据多个属性来排序

SELECT empno,ename,mgr,hiredate,deptno,jobno FROM test_emp ORDER BY deptno,jobno (ASC)

SELECT empno,ename,mgr,hiredate,deptno,jobno FROM test_emp ORDER BY deptno,jobno DESC

SELECT empno,ename,mgr,hiredate,deptno,jobno FROM test_emp ORDER BY deptno DESC,jobno DESC

count 统计表中所有的行数或是记录数或是元组数

#统计test_emp表中总员人数

SELECT COUNT(*) FROM test_emp

SELECT COUNT(empno) AS 总人数 FROM test_emp

AVG() 求平均值

SELECT AVG(sal) FROM test_job

sum()求和

SELECT SUM(sal+comm) 月工资总和 FROM test_job

max():统计最大值

SELECT MAX(sal) FROM test_job

min():统计最小值

SELECT MIN(sal) FROM test_job

列值拼接函数GROUP_CONCAT()

#拼接职位名称

SELECT GROUP_CONCAT(jobname) FROM test_job

指定分隔符

SELECT GROUP_CONCAT(jobname SEPARATOR '+') FROM test_job

group by...having...

SELECT deptno AS 部门号, COUNT(empno) AS 部门人数 FROM test_emp GROUP BY deptno HAVING COUNT(empno)>2

limit 限制查询结果显示

SELECT * FROM test_emp LIMIT 2

upper()将小写字符转成大写字符

SELECT UPPER("zhang")

lower()将x中的大写字符转成小写字母

SELECT LOWER("ZHANG")

length() 返回字符个数

#在length()函数中规定:一个英文占一个字符,一个数字占一个字符,一个中文字占3个字符

SELECT LENGTH(ename) FROM emp WHERE ename="orlando222为"

char_length()规定:一个中文占一个字符,一个字母和一个数字也占一个字符

SELECT CHAR_LENGTH(job),job FROM emp WHERE empno=1001

SELECT CHAR_LENGTH("你好smith")

replace(x,char1,char2)将x中的char1替换成Char2;大小写字母敏感

SELECT REPLACE(ename,"I","abc"),ename FROM emp WHERE empno=1001

SELECT REPLACE("ZHANG","ZH","w")

concat(x,y):字符拼接函数 --xy

SELECT CONCAT(ename,"hello") FROM emp WHERE empno=1001

SELECT CONCAT(ename,job) FROM emp WHERE empno=1001

SELECT CONCAT("hello","lidong")

curdate():返回当前日期,year-month-day

SELECT CURDATE()

curtime():返回当前时间 hour-min-second

SELECT CURTIME()

now():返回当前的日期和时间

SELECT NOW()

last_day(x)查询日期x所在月份的最后一天

SELECT LAST_DAY("1900-02-01")

SELECT LAST_DAY(20160201)

data_add(x,interval n f):

SELECT DATE_ADD("2016-02-01",INTERVAL 2 YEAR)

SELECT DATE_ADD(20160229,INTERVAL 2 DAY)

SELECT DATE_ADD(20161231,INTERVAL 2 MONTH)

date_format():返回用户指定的日期格式

SELECT DATE_FORMAT("2016-02-01 10:10:10","%Y-%m-%d")

SELECT DATE_FORMAT("2016-02-01 10:10:10","%y")

SELECT DATE_FORMAT("2016-02-01 10:10:10","%Y")

 

SELECT DATE_FORMAT("2016-02-01 10:10:10","%Y-%m-%d %T")

SELECT DATE_FORMAT("2016-02-01 10:10:10","%Y-%m-%d %W")

 

SELECT DATE_FORMAT("2016-02-01 10:10:10","%c")

SELECT DATE_FORMAT("2016-02-01 10:10:10","%m")

SELECT DATE_FORMAT("2016-02-01 10:10:10","%M")

================================================================================

#定义一个课程表,属性:课程编号,课程名称,学分,主键:课程名称,使用表级定义主键

CREATE TABLE class

(

id INT,

NAME VARCHAR(20),

xuefen INT,

PRIMARY KEY(NAME)

)

 

SHOW TABLES

DESC class

DROP TABLE class

SHOW TABLES

#定义一个课程表,属性:课程编号,课程名称,学分,主键:课程名称,使用列级定义主键

CREATE TABLE ach

(

id INT,

NAME VARCHAR(20) PRIMARY KEY,

xuefen INT

)

 

#定义一个成绩表,属性:学号,课程名称,成绩,主键:学号和课程名称

#如果主键由多个属性组成,则必须定义为表级约束

CREATE TABLE chengji

(

id INT,

NAME VARCHAR(20),

score INT,

PRIMARY KEY(id,NAME)

)

================================================================================

#1、查询test_emp表中名字长度超过3个字的员工姓名

#char_length(x):规定一个汉字占一个字符

#length(x):规定一个汉字占3个字符

SELECT ename FROM test_emp WHERE CHAR_LENGTH(ename)>3

SELECT ename FROM test_emp WHERE CHAR_LENGTH(ename)>=4

SELECT ename FROM test_emp WHERE ename LIKE "____%"

 

#2、查询test_emp表中员工‘总经理’入职月份的最后一天日期

SELECT LAST_DAY(hiredate) FROM test_emp WHERE ename="总经理"

 

#3. 查询test_emp表中员工‘总经理’入职前一天的日期

SELECT DATE_ADD(hiredate,INTERVAL -1 DAY) FROM test_emp WHERE ename="总经理"

 

#4、查询test_job表中各个职位的年薪,如果是董事长按15薪统计,总经理按13薪统计

#第一种方式

SELECT

CASE

WHEN jobname="董事长" THEN (sal+comm)*15

WHEN jobname="总经理" THEN (sal+comm)*13

ELSE (sal+comm)*12

END AS 年薪

FROM test_job

 

#第二种方式

SELECT

CASE jobname

WHEN "董事长" THEN (sal+comm)*15

WHEN "总经理" THEN (sal+comm)*13

ELSE (sal+comm)*12

END 年薪

FROM test_job

 

#第三种方式

SELECT (sal+comm)*

CASE

WHEN jobname="董事长" THEN 15

WHEN jobname="总经理" THEN 13

ELSE 12

END AS 年薪

FROM test_job

 

#第四种方式

SELECT (sal+comm)*

CASE jobname

WHEN "董事长" THEN 15

WHEN "总经理" THEN 13

ELSE 12

END AS 年薪

FROM test_job

================================================================================

多表查询:

1、#查询工作地点为北京的员工名称
#用到的表dept  emp
#查询字段emp.ename
#限制条件 loc='北京'
#表之间的依赖关系 emp.deptno=dept.deptno

 

#内联接,方法1

select emp.ename 员工名称 from emp,dept where emp.deptno=dept.deptno and loc='北京'

#内联系,方法2

select emp.ename from emp inner join dept on emp.deptno=dept.deptno where loc='北京'

#左连接

select emp.ename from emp left join dept on emp.deptno=dept.deptno where loc='北京'

#右连接

select emp.ename from emp right join dept on emp.deptno=dept.deptno where loc='北京'

#子查询

select ename from emp where deptno=(select deptno from dept where loc='北京')
 

 

#2、统计每个部门不同职位的员工人数(多表查询)

#用到的表 dept  emp job
#查询字段 dept.dname ,count(emp.jobno)
#限制条件 job.jobno=emp.jobno and emp.deptno=dept.deptno
#表之间的依赖关系

select dept.dname 部门名称,count(emp.jobno) 员工人数 from emp,job,dept where job.jobno=emp.jobno and emp.deptno=dept.deptno
group by emp.deptno

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值