MySql教程

MySQL基础知识

本文主要是介绍MySQL基础知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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;


这篇关于MySQL基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!