当前位置:首页 » 《随便一记》 » 正文

MySQL纯代码复习

11 人参与  2022年11月10日 18:49  分类 : 《随便一记》  评论

点击全文阅读


入门基本语句

最基本的SELECT…FROM结构

我们首先学习以下最基本的SELECT语句,学习结构和一些基本常数查询和虚表了解

#最基本的SELECT语句:SELECT 字段1、字段2...FROM 表名SELECT 1;#没有任何子句SELECT 9/2;#没有任何子句SELECT 1+1FROM DAUL;#伪表# *:表中的所有字段(或列)SELECT*FROM employees;#查询具体列SELECT employee_id,last_name,salaryFROM employees;

列的别名_去重_NULL_DESC等操作

在开发中,Java的对象和数据库的对象的命名规则是不一样的,所以需要起别名来改变映射,来适应Java的底层反射,不过在平常的MySQL查询中,别名也是非常常用和实用的操作

列的别名

#列的别名#查询返回的结果集合称为结果集:resultSet#它们都可以完成别名效果,但是如果你起的别名是有空格的,则一定要添加''来使用,否则会报错,添加AS则可读性会好一些 SELECT employee_id AS "emp_id",last_name AS "emp_name",department_id AS "emp_dept_id"FROM employees;SELECT employee_id "emp_id",last_name "emp_name",department_id "emp_dept_id"FROM employees;SELECT employee_id emp_id,last_name emp_name,department_id emp_dept_idFROM employees;SELECT employee_id AS emp_id,last_name AS emp_name,department_id AS emp_dept_idFROM employees;#单引号别名也是可以的,但是只是MySQL的不严谨性#MySQL的varchar字符串应该是单引号,但是双引号也可以,这是MySQL的不严谨,一定要养成使用 别名:双引号 字符串:单引号INSERT INTO empVALUES(1002,"TOM");

在我们只需要知道有哪些分类时,就无需将每个分类都展现出来

去重

#去除重复行#查询员工表中有哪些部门id#使用关键字 -> distinct 去重 SELECT DISTINCT department_idFROM employees;

在很多编程语言都是有NULL,而NULL通常不可以参与运算,大部分编程语言都是NULL运算等于NULL,Java遇到NULL对象属性也会直接抛出NULL空指针异常…

NULL

#空值参与运算#1.空值:null#2.null不等同于0,'','null'SELECT NULL=0,NULL='',NULL=NULL;#正常情况应该是0或1,但是和NULL运算的结果全部是NULL#查询奖金率,但是很多员工的奖金率是NULL(没有奖金率)SELECT * FROM employees;#查询月工资和年工资 #控制参与运算:结果一定为空SELECT employee_id,salary "月工资",salary*(1+commission_pct)*12 "年工资",commission_pctFROM employees;#错误的演示,因为有了控制运算会让查询结果直接是NULL#使用了处理NULL的函数来解决问题#如果字段不是NULL,则是多少就算多少,如果是NULL就用参数2来替换数值SELECT employee_id,salary "月工资",salary*(1+IFNULL(commission_pct,0))*12 "年工资",commission_pctFROM employees;#错误的演示,因为有了控制运算会让查询结果直接是NULL

在极少数情况下,我们声明的标识符会和官方定义的关键字重命,这时候再使用就需要添加着重号来告诉MySQL情况了

着重号

#着重号#着重号一般是用来多表连接时添加的,系统喜欢自动添加着重号,不过最大意义是用来将关键字重名的字段区分为普通字段#着重号是左上排数字键1的右边的~位置,不按Shift并且是英文状态按该键就是 ` 着重号CREATE TABLE t(NAME VARCHAR)CREATE TABLE t(`NAME` VARCHAR)SELECT * FROM ORDER;SELECT * FROM `ORDER`;

查询常数是使用较少的一种手段

查询常数

#查询常数#该内容,查询记录有多少条记录,就生成多少条记录SELECT '宝马三系','落地三十万+',employee_id,last_nameFROM employees;

查看表结构是非常常用的命令,通常用来验证属性的添加、修改等等操作

DESC操作

#显示表结构#describe是desc的全称,而desc则是缩写,一般都常用desc,因为好拼和少DESCRIBE employees;#显示了表中字段的详细信息DESC employees;DESC departments;DESCRIBE departments;

使用WHERE过滤数据

在我们实际开发中,不可能总是查询表中所有的记录,这样会浪费大量的物资资源IO也会浪费时间和冗余的数据量,我们总是只需要有意义和有用的数据或内容,所以一个完整的查询一定是要有过滤数据的(除像select*from tableName这种情况)

 #过滤数据 #基本结构 #SELECT...FROM...WHERE... #查询90号部门员工的信息 SELECT *  FROM employees  WHERE department_id = 90; #练习:查询last_name为'King'的员工信息 SELECT * FROM employees#MySQL是大小写不敏感的 WHERE last_name = 'King';

基本SELECT查询课后练习

#基本的SELECT语句的课后练习#1.查询员工12个月工资的总和,并起别名为ANNUAL SALARYSELECT employee_id AS "员工号",first_name AS "名",last_name AS"姓",salary*(1+IFNULL(commission_pct,0))*12 AS "ANNUAL SALARY"FROM employees;#2.查询employees表中去除重复的job_id以后的数据SELECT DISTINCT job_idFROM employees#3.查询工资大于12000的员工信息和工资SELECT * FROM employeesWHERE salary>12000;#4.查询员工号为176的员工的姓名和部门号SELECT * FROM employeesWHERE employee_id = 176;#5.显示表departments的结构,并查询其中的全部数据DESC departments;SELECT*FROM departments;

-----------------------------------------------

运算符

算术运算符的使用

在这里插入图片描述

#运算符#算术运算符: + - * / div % MOD SELECT 100,100+0,100-0,100+50,100+50-30,100+35.5,100-35.5#整形和浮点型FROM DUAL;#虚表#MySQL的+号没有Java的拼接符的意思,这里是101结果,是底层隐式转换的结果SELECT 100+'1'FROM DUAL;SELECT 100+'a'#此时将'a'看做0处理FROM DUAL;SELECT 100+NULL#NULL运算都为NULLFROM DUAL;SELECT 100,100*1,100*1.0,100/1.0,100/2,100+2*5/2,100/3,100 DIV 0 #分母如果为0则结果为NULLFROM DUAL#取模运算:% modSELECT 12%3,12%5,12 MOD -5 ,-12%5,-12%-5FROM DUAL;#练习:查询员工id为偶数的员工信息SELECT employee_id,last_name,salaryFROM employeesWHERE employee_id % 2 = 0;

比较运算符的使用

比较运算符用来对表达式的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回适合的条件的结果记录
在这里插入图片描述
在这里插入图片描述

符号运算符

#比较运算符# = <=> <> != < <= > >=#如果为真 返回1#如果为假 返回0#如果为其他情况 返回NULLSELECT 1 = 2,1!=2,1='1',1='a',0='a'#和四则运算那个道理一样 'a'不能隐式转换,所以是0FROM DUAL;#两边都是字符串的话,则按照ANSI的比较规则进行比较SELECT 'a'='a','ab'='ab','a'='b'FROM DUAL;SELECT 1=NULL,NULL=NULL #只要有null参与判断,结果就为nullFROM DUAL;SELECT last_name,salaryFROM employees#where salary = 6000;WHERE commission_pct = NULL;#不会有任何结果#<=>:安全等于->为NULL而生SELECT 1<=>2,1<=>'1',1<=>'a',0<=>'a'FROM DUAL;SELECT 1<=>NULL,NULL<=>NULL#结果0 1,当有NULL时结果是0,所以0=0FROM DUAL;SELECT last_name,salary,commission_pctFROM employeesWHERE commission_pct <=> NULL;SELECT 3<>2,'4'<>NULL,''!=NULL,NULL!=NULLFROM DUAL;

非符号运算符

在这里插入图片描述

第一波

#非符号运算符#IS NULL\IS NOT NULL\ISNULL#练习:查询表中commission_pct为null的数据有哪些SELECT last_name,salary,commission_pctFROM employeesWHERE commission_pct IS NULL;和安全等于是一模一样的#或SELECT last_name,salary,commission_pctFROM employeesWHERE ISNULL(commission_pct);#练习:查询表中commission_pct不为null的数据有哪些SELECT last_name,salary,commission_pctFROM employeesWHERE commission_pct IS NOT NULL;#只查询不为NULL的数据#或SELECT last_name,salary,commission_pctFROM employeesWHERE NOT commission_pct <=> NULL;

第二波

#LEAST()\GREATEST least greatestSELECT LEAST('g','b','t','m'),GREATEST('g','b','t','m')#比较的是字母的顺序a-zFROM DUAL;#length -> 字符长度(个数)SELECT LEAST(first_name,last_name),LEAST(LENGTH(first_name),LENGTH(last_name))FROM employees;#BETWEEN...AND#查询工资在6000到8000的员工信息SELECT employee_id,last_name,salary#between...and...FROM employees#&&\AND:且 | or:或 | NOT:非 #where salary BETWEEN 6000 AND 8000;包括边界值#WHERE salary >=6000 && salary<=8000;WHERE salary >=6000 AND salary<=8000;#不要放过来写,会直接无结果的#查询工资不在6000-8000的员工信息SELECT employee_id,last_name,salary#between...and...FROM employees#WHERE salary <6000 or salary > 8000;WHERE NOT salary BETWEEN 6000 AND 8000;#包括边界值#in(set)\not in(set)#连习:查询部门为10,20,30部门的员工信息SELECT last_name,salary,department_idFROM employeesWHERE department_id IN(10,20,30);#如果用 10 OR 20 OR 30是不靠谱的 因为20和30非0就看成1了,全都要了 所以要改为。department_id=20...#练习:查询工资不是6000,7000,8000的员工信息SELECT last_name,salaryFROM employeesWHERE NOT salary IN(6000,7000,8000);#where salary NOT in(6000,7000,8000);#LIKE:模糊查询#练习:查询last_name中包含字符'a'的员工信息SELECT last_name,first_name,salaryFROM employees#如果是 'a%'那就表示名字以a开头的员工,如果是'%a'就表示名字以a结束的员工,其他的依次根据情况类推...WHERE last_name LIKE '%a%';#忽略了大小写;'%a%'%表示前面有不确定个数的字符,%表示后面有不确定个数的字符#练习last_name中包含字符'a'且包含字符'e'的员工信息SELECT last_name,salaryFROM employees#where last_name like '%a%' and last_name LIKE '%e%';WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';#_:代表一个不确定的字符#练习:查询第三个字符是'a'的员工信息SELECT last_nameFROM employeesWHERE  last_name LIKE '__a%';#中间不要加空格#练习:查询第二个字符是_且第三个字符串是'a'的员工信息#需要使用转义字符:\SELECT last_name FROM employeesWHERE last_name LIKE '_\_a%';#或者(了解)SELECT last_name FROM employeesWHERE last_name LIKE '_$_a%' ESCAPE '$';#自定义转义字符 默认是斜线\表示转义

第三波

#REGEXP\RLIKE:正则表达式#1:该字符串是否以s开头? 1#2:该字符串是否以t结尾? 1#3:该字符串是否包含hk? 1SELECT 'shkstart' REGEXP '^s','shkstart' REGEXP 't$','shkstart' REGEXP 'hk'FROM DUAL;#1:是否包含gu?gu 中间有一个不确定的字符 1#如果是 gu..gu 则是 0#2:该字符串是否包含a或者包含bSELECT 'atguigu' REGEXP 'gu.gu','atguigu' REGEXP '[ab]'FROM DUAL;

在这里插入图片描述

逻辑运算符与位运算符的使用

P20
明天目标 40P++


点击全文阅读


本文链接:http://zhangshiyu.com/post/47848.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1