ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL基础知识

2021-11-09 23:04:03  阅读:116  来源: 互联网

标签:last name -- employees 基础知识 MySQL 查询 select


MySQL基础知识

1 基础查询语法

/*
	基础语法:
		select 查询列表 from 表名;
	特点:
		1.查询列表可以是:字段,常量值,表达式,函数
		2.查询的结果是一个虚拟的表格
*/
--eg1:字段
select * from employees;
--eg2:常量值
select 100;
select 'test';
--eg3:表达式
select * from 100*2;
--eg4:函数
select VERSION();

1.1 取别名

/*
	取别名(两种方式):
		1.as关键字,
		2.空格
*/
--第一种方式:
select last_name as 姓,first_name as 名 from employees;
--第二种方式:
select last_name 姓,first_name 名 from employees;

--案例1:查询salary,显示结果为out put(需要使用双引号,单引号也行,MySQL建议使用双引号)
select salary as "out put" from employess;

1.2 去重

/*
	distinct关键字:去重
*/
--eg:查询员工表中涉及到的所有的部门编号
select distinct department_id from employess;

1.3 +号的作用

/*
	java中的+号作用:
		1.运算符:两个操作数都是数值型
		2.连接符:只要有个一个操作数为字符串
	MySQL中的+号作用:
		仅仅有一个作用:运算符
		1.如果两个操作数都是数值型,则做加法运算;
		2.如果其中一方为字符型,则试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算,如果转换失败,则将字符型数值转换成0
		3.如果只要其中一方为null,则结果一定为null
*/
--eg1:数值型+数值型
select 100 + 90;
	>> 190
--eg2:字符型+数值型
select 'shutterbug' + 90;
	>> 90
--eg3:null+数值型
select null + 90;
	>> null

/*
	concat函数:
		作用:连接字符串
		语法:concat(str1/字段1,str2/字段2,...)
		说明:在连接字符串时,只要其中一个是null,则返回null
	
	eg1:select concat('11','22','33');
		>> 112233
	eg2:select concat('11','22',null);
		>> null
*/
--案例1:查询员工名和姓连接成一个字段,并显示为姓名
--错误sql:select last_name + first_name as 姓名 from employees;
select concat(last_name,' ',first_name) as 姓名 from employess;
	>> Chen John

2 条件查询

/*
	分类:
		1.按照条件表达式筛选
			简单条件运算符:> < = != <> >= <= 
		2.按照逻辑表达式筛选
			逻辑运算符:&& || ! and or not (作用于连接条件表达式)
			&& 或 and:两个条件都为true,结果为true,否则为false
			|| 或 or:只要一个条件为true,结果为true,否则为false
			! 或 not:连接条件本身为false,结果为true,否则为false
		3.模糊查询
			like
			between and
			in
			is null
*/

2.1 按照条件表达式筛选

--eg1:查询工资>12000的员工信息
select * from employees where salary > 12000;
--eg2:查询部门编号不等于90的员工名和部门编号
select last_name,department_id from employees where department_id != 90;
或者
select last_name,department_id from employees where department_id <> 90;
或者
select last_name,department_id from employees where department_id > 90 or dempartment_id < 90;

2.2 按照逻辑表达式筛选

--eg1:查询工资在10000到20000之间的员工名,工资以及奖金
select last_name,salary,commission_pct where salary >= 10000 and salary <= 20000;
--eg2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select * from employees where not(department_id >= 90 and department_id <= 110) or salary >= 15000;

2.3 模糊查询-like

/*
	特点:一般和通配符搭配使用
		通配符:
			%:任意多个字符,包含0个字符
			_:任意单个字符
*/
--eg1:查询员工名中包含a的员工信息
select * from employees where last_name like '%a%';
或
/*使用concat函数模糊匹配-不推荐*/
select * from employees where last_name like concat("%","a","%");
--eg2:查询员工名中第三个字符为s,第五个字符为i的员工信息
select * from employees where last_name like '__s_i%';
--eg3:查询员工名中第二个字符为_的员工名
select last_name from employees where last_name like '_\_%';
/*
	escape关键字:
		指定一个字符代替"\"的使用
*/
select last_name from employees where last_name like '_$_%' escape '$';

2.4 模糊查询-between and

/*
	特点:
		1.使用between and可以提高语句的简洁度
		2.包含临界值
		3.两个临界值不能调整顺序
*/
--eg1:查询员工编号在100到120之间的员工信息
select * from employees where employee_id >= 100 and employees <= 120;
或
/*这两条语句是等价的*/
select * from employees where employee_id between 100 and 120;

2.5 模糊查询-in

/*
	含义:判断某字段的值是否属于in列表中的某一项
	特点:
		1.提高了语句的简洁度
		2.in列表中的值类型必须一致或者兼容
		3.in类表中不支持通配符
*/
--eg1:查询员工的工种编号是IT_PROG,AD_VP,AD_PRES中的一个员工名和工种编号
select last_name,job_id from employees where job_id = "IT_PROG" or job_id = "AD_VP" or job_id = "AD_PRES";
或
select last_name,job_id from employees where job_id in("IT_PROG","AD_VP","AD_PRES");

2.6 模糊查询-is null

/*
	is null 或 is not null:可以判断null值
	= 或 <>:不能用于判断null值
	<=>:安全等于即可判断null值,又可判断普通类型的数值
*/
--eg1:查询没有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null;
--eg2:查询有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is not null;
--eg3:查询工资为12000的员工名和奖金率(错误查询语句示例)
select last_name,commission_pct from employees where salary is 12000;
/*使用<=>*/
--eg4:查询没有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct <=> null;
--eg5:查询工资为12000的员工名和奖金率
select last_name,commission_pct from employees where salary <=> 12000;
/*
	ifnull(parm1,parm2)函数:
		如果第一个参数为null,则返回第二个参数的值
*/
--eg6:显示出first_name,last_name,job_id,commission_pct列,各个列之间用逗号连接,列头显示成out_put
select concat(first_name,"_",last_name,"_",job_id""_",ifnull(commission_pct,0)) as out_put from employees;

3 排序查询

/*
	语法:
		select 
			查询列表 
		from 表名 
		where 
			筛选条件 order by 排序的字段或者表达式
	特点:
		1.asc代表升序,可以省略
		2.desc代表的是降序
		3.order by子句可以支持单个字段,别名,表达式,函数,多个字段
		4.order by子句在查询语句的最后面,除了limit子句
*/
--	一:按单个字段排序
select * from employees order by salary desc;
--案例1:查询部门编号>=90的员工信息,并按员工编号降序
select * from employees where department_id >= 90 order by employee_id desc;

--	二:按表达式排序
--案例2:查询员工信息,并按年薪降序
select *,salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees order by salary*12(1+ifnull(commission_pct,0)) desc;

--	三:按别名排序
--案例3:查询员工信息,并按年薪升序
select *,salary*12(1+ifnull(commission_pct,0)) as 年薪 from employees order by 年薪 asc;

--	四:按函数排序
--案例4:查询员工名,并且按照名字的长度降序
select last_name,length(last_name) from employees order by length(last_name) desc;
select last_name,length(last_name) name_len from employees desc;

--	五:按多个字段排序
--案例5:查询员工信息,要求先按工资降序,再按员工编号升序
select * from employees order by salary desc,employee_id asc;


标签:last,name,--,employees,基础知识,MySQL,查询,select
来源: https://blog.csdn.net/HTY_Rui/article/details/121049701

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有