mysql 基础命令

进阶1:基础查询
/*
语法:
select 查询列表 from 表名;


类似于:System.out.println(打印东西);

特点:

1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
*/

USE myemployees;

#1.查询表中的单个字段

SELECT last_name FROM employees;

#2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;

#3.查询表中的所有字段

#方式一:
SELECT 
    `employee_id`,
    `first_name`,
    `last_name`,
    `phone_number`,
    `last_name`,
    `job_id`,
    `phone_number`,
    `job_id`,
    `salary`,
    `commission_pct`,
    `manager_id`,
    `department_id`,
    `hiredate` 
FROM
    employees ;
#方式二:  
 SELECT * FROM employees;
 
 #4.查询常量值
 SELECT 100;
 SELECT 'john';
 
 #5.查询表达式
 SELECT 100%98;
 
 #6.查询函数
 
 SELECT VERSION();
 
 
 #7.起别名
 /*
 ①便于理解
 ②如果要查询的字段有重名的情况,使用别名可以区分开来
 
 */
 #方式一:使用as
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;

#方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;


#案例:查询salary,显示结果为 out put
SELECT salary AS "out put" FROM employees;


#8.去重


#案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;


#9.+号的作用

/*

java中的+号:
①运算符,两个操作数都为数值型
②连接符,只要有一个操作数为字符串

mysql中的+号:
仅仅只有一个功能:运算符

select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型
            如果转换成功,则继续做加法运算
select 'john'+90;    如果转换失败,则将字符型数值转换成0

select null+10; 只要其中一方为null,则结果肯定为null

*/

#案例:查询员工名和姓连接成一个字段,并显示为 姓名


SELECT CONCAT('a','b','c') AS 结果;

SELECT 
    CONCAT(last_name,first_name) AS 姓名
FROM
    employees;
    
    
 

 

 

 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> show tables from mysql;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
 

mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

mysql> create table stuinfo(
    -> id int,
    -> name varchar(20));

Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| stuinfo        |
+----------------+
1 row in set (0.00 sec)

mysql> desc stuinfo;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from stuinfo;
Empty set (0.00 sec)

mysql> insert into stuinfo (id,name) values(1,'john');
Query OK, 1 row affected (0.00 sec)

mysql> insert into stuinfo (id,name) values(2,'rose');
Query OK, 1 row affected (0.00 sec)

mysql> select * from stuinfo;
+------+------+
| id   | name |
+------+------+
|    1 | john |
|    2 | rose |
+------+------+
2 rows in set (0.00 sec)

mysql> update stuinfo set name='lilei' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stuinfo;
+------+-------+
| id   | name  |
+------+-------+
|    1 | lilei |
|    2 | rose  |
+------+-------+
2 rows in set (0.00 sec)

mysql> delete from stuinfo where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from stuinfo;
+------+------+
| id   | name |
+------+------+
|    2 | rose |
+------+------+
1 row in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.15    |
+-----------+
1 row in set (0.00 sec)

mysql> exit
Bye

C:\Windows\system32>mysql --version
mysql  Ver 14.14 Distrib 5.5.15, for Win32 (x86)

C:\Windows\system32>mysql -V
mysql  Ver 14.14 Distrib 5.5.15, for Win32 (x86)

转义字符:escape

select last_name from employees where last_name like '_$_%' escape '$';

 

between N and N1

name_id  betwenn 100 and 120; 包含100 和120;

安全等于:    <=>

不仅可以判断null 也可以判断数值

select × from employees where status <=> null;

 

order by 支持 单个字段 多个字段 函数、别名;

upper,lower、concat、group_concat

substr('abcd',1,2) 字符串,起始位置,长度

substr('abcd',2) 从第二字符开始到末尾

instr('abcde','a')返回字符串第一次出现的位置(索引)

返回:1

TRIM () 去空格

LPAD,RPAD 左填充、右填充

 

数学函数:

round 四舍五入

select round(1.345);

ceil() 向上取整

select(1.00)

floor() 向下取整

日期函数:

select now();
select curdate()

select curtime()
select year('1922-01-02')
select month('1922-01-02')
select day('1922-01-02')

str_to_date('9-13-1999','%m-%d-%Y')

select str_to_date('1922-09-12','%Y-%m-%d')

select data_format(now(),'%Y年%m月%d日')

 

流程控制函数:

1、if 函数: if else 的函数

 

select if(10 <5,'大','xiao')
select if(10>5,'da','xiao')

2、

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
.......
else
要显示的值n 或者语句
end
 

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
.......
else
要显示的值n 或者语句
end

第一个案例(等值判断)

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
.......
else
要显示的值n 或者语句
end

案例1:
部门号=30 显示的工资为1.1倍
部门号=40 显示的工作为1.2
部门号=50 显示的工资为1.3
其他部门,显示的工资为原工资


select salary 原始工资,department_id, 
case department_id
when 30 then salary * 1.1
when 40 then salary * 1.2
when 50 then salary * 1.3
else salary
end as 新工资
from employees

第二种情况:(区间判断)


case
when 条件1 then 要显示的值1 或语句1
when 条件2 then 要显示的值2 或语句2
......
else 要显示的值n 或语句n
end

案例:查询员工的工作情况
如果工资>20000 显示A
如果工资>15000 显示B
如果工资>10000 显示c
否则显示D


select salary,
CASE 
     when salary > 20000 then 'A'
     when salary > 15000 then 'B'
     when salary > 10000 then 'C'
 else 'D'
 end as 工资级别
 from employees

select job_id as job,
case job_id
when  'AD_PRES' then 'A'
when 'ST_MAN' then 'B'
when 'IT_PROG' then 'C'
when 'SA_PRE' then 'D'
end as groade
from employees

 

 

统计函数:

sum() null 与任何数字都为null

count() 统计的是非空字段,null 不会被统计

avg() 不计算为null的字段

min() 不区分数值和字符串

max() 不区分数值和字符串类型

distinct 去重

 

group by 

select max(salary),job_id from employees GROUP BY employee_id;

select avg(salary),department_id from employees where email like '%a%' GROUP BY department_id

select max(salary),manager_id 
from employees
where commission_pct is not null
GROUP BY manager_id

分组后的刷选:

select count(employee_id) from  employees GROUP BY department_id HAVING count(employee_id) > 5;

 

select manager_id,min(salary) from employees
where manager_id > 102
group by manager_id
HAVING min(salary) > 5000
 

连接查询:

EXPLAIN
select department_name,d.manager_id, min(salary)
from departments d, employees e
where d.department_id=e.department_id
and commission_pct is not null
group by department_name,d.manager_id

 

sql92 标准:

夺标等值连接

n个表连接需要n-1 个连接条件

 

自连接:

查询员工名和上级领导的名(同一个表进行两次查询)

select e.employee_id, e.last_name,m.employees_id,m.last_name
from employees e,employees m
where e.manager_id=m.employee_id
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值