MySQL学习(一)
①mysql常见命令:
-
查看所有数据库
show database;
-
打开指定的数据库
use 库名
-
查看当前数据库的所有表:
show tables;
-
查看其它库的所有表
show tables from 库名;
-
创建一个表
Crete table 表名( 列名 列类型, 列名 列类型 );
-
查看表结构
desc 表名;
-
查看服务器版本
方式一: 登录到mysql幅度按:select version(); 方法二:没有登录: mysql -version
②MySQL规范
-
不区分大小写
(建议关键字大写,表名,列名小写)
-
每条命令需要用;结尾,但是你不写也没关系
-
每条命令根据需要,我们可以进行缩进或者换行
-
注释:
单行注释:#注释文字
单行注释:-- 注释文字
多行注释: /* 注释文字 */
③DQL查询语句
1.表中信息分析
2.基础查询
语法:
select 查询列表 from 表明;
类似与:System.out.printf(打印的内容);
特点:
- 查询的列表可以是:表中的字段,常量值,表达式,函数
- 查询的是一个虚拟的表格
1)字段的查询
# 基础查询
#启用myemployees数据库
USE myemployees ;
#查询单个字段
SELECT
last_name
FROM
employees ;
#查询表中的多个字段
SELECT
last_name,
salary,
email
FROM
employees ;
#查询表中的所有字段
SELECT
*
FROM
employees ;
# 查询多个字段我们还可以用双击左边的方法进行查询
SELECT
`last_name`,
`phone_number`
FROM
employees ;
2)查询其他信息
#查询常量值
SELECT 100;
SELECT 'john';
#查询表达式
SELECT 100*98;
SELECT 200%98
#查询相关函数
SELECT VERSION();
/*
mysql的版本信息*/
3)起别名
#查询常量值
SELECT 100;
SELECT 'john';
#查询表达式
SELECT 100*98;
SELECT 200%98
#查询相关函数
SELECT VERSION();
/*
mysql的版本信息*/
#起别名
/*
①便于理解
②如果需要查询的字段有重名的情况,使用别名可以将其分开
*/
#方法一
SELECT 100%98 AS 结果;
SELECT
last_name AS 姓,
first_name AS 名
FROM
employees ;
#方法二
SELECT 100%98 AS 结果;
SELECT
last_name 姓,
first_name 名
FROM
employees;
#案例:查询salary,显示结果为out put(有特殊符号别名加上引号)
SELECT salary AS “output” FROM employees;
4)去重
#去重
#案例:查询所有的部门编号
SELECT DISTINCT department_id FROM employees;
5)+号的作用
#+号的作用
/*
java中的加号的作用:
1. 充当运算法
2. 充当连接符,只要一个是字符串就是连接符
mysql中的加号的作用:
1.他只有运算符的作用
select "190"+184,其中一个为字符型,他就会试图将其装换为数值型
select “john”+90; ==90 如果转换失败那么,就会将字符转换为0
select null+0,只要其中一方为null。那他的结果肯定为null
*/
#案例查询员工的姓和名连接为一个字段并显示为姓名
/*
错误演示
SELECT last_name+first_name AS 姓名 FROM employees;
*/
#正确示范
SELECT CONCAT(last_name,first_name)AS 名字 FROM employees;
3. 条件查询
语法:
select 查询列表 from 表名 where 筛选条件
分类:
1. 按条件运算符筛选
* 条件运算符:> < , = ,**!=(<>)** ,>= , <=
2. 按逻辑表达式筛选
* 逻辑运算符
* && || !(与或非)
* and or not
* 与的意思就是并且,两个为true才是true
* 或只要一个为true,结果就是true
* 非 not,连接的条件如果相同那么为true,否则为false
- 模糊查询
- like
- between and
- in
- is null
1)按条件表达式的筛选
#案例一 查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
#案例二,查询部门名编号不小于90的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id!=90;
2)按逻辑运算符筛选
#案例一 查询工资在10000-20000之间的员工名,工资,以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND
salary<=20000;
#案例二 查询部门编号不是在90-110之间的,或者工资高于15000的员工信息
#方法一
SELECT * FROM
employees
WHERE
department_id<90 OR department_id>110 OR salary>15000;
#方法二
SELECT * FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
3)模糊查询
①like的使用
#1.like--因为他只是模糊匹配,不是精确匹配
#案例一:查询员工名中包含字符A的员工信息
/*
特点:一般和通配符搭配使用:
%包含任意多个字符,也可以为空
_任意多个字符
*/
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
#案例二 查询员工名单中,第二个位e,第五个为a的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '_e_a%';
#案例三查询用户名第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%'
#方法二:定义转义字符
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_@_%' ESCAPE '@';
②between and的使用
#2. between的使用
#查询员工编号在100-120之间的所有信息
/*
注意事项:
1.使用我们的between and可以提高语句的简洁度
2.包含临界值的
3.中间的两个值不可以颠倒顺序
*/
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
③in关键字的使用
/*
特点:
1使用in做筛选比使用or做筛选提高的语句简洁度
2. 里面的值需要都是同样的数据类型
3. 不支持使用通配符
*/
#案例 :查询员工的工种编号是:IT_PROC, AD_VD, AD_DRES中的一个的
SELECT last_name ,job_id
FROM
employees
WHERE
job_id IN ('IT_PROT', 'AD_VP', 'AD_PRES');
④is null的使用
/*
= 或者<>不能判断不等于
is null 和is not noll 可以判断
*/
#案例一: 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
#案例2: 查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
#------下面是错误
SELECT
*
FROM
employees
WHERE
salary IS 12000;
⑤安全等于
#安全等于<=>
/*
1.可以判断null
2.也可以判断普通类型
*/
#案例一: 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
#案例二:
SELECT
*
FROM
employees
WHERE
salary <=> 12000;