mysql> select 字段名称,字段名称2 from 表名 条件
简单查询:
mysql> select * from t3;
mysql> select name, salary, dep_id from employee5;
避免重复DISTINCT
select post FROM employee5;
select distinct post from employee5;
在字段前面加distinct,它看的是整体,并不是适用于所有的场景。通常仅用于某一字段。
通过四则运算查询
跟表没有关系的四则运算
可以利用mysql做单独的运算,跟任何库,任何表没关系
select 5.8*9.6;
select 5.8*9.6-(8+2)/3;
select (5.8*9.6-(8+2)/3)%2; 取模
mysql -u root -p'Helloworld123!' -e 'select 8*5'
假如系统里面有mysql而且装好了,想做数学运算,不一定非得用shell了,可以调用mysql
mysql -e 'select 8*5' 调用mysql -e想做什么把式子写上就行。这种没有shell本身简单,但是它的计算能力是shell的很多倍,shell完不成的很多操作它能完成。它的计算能力比shell强,比如,用shell做一个小数运算。
想拿到40,用awk拿,awk处理会自动忽略这些横线竖线和+号。只当作一个两行的数据
mysql -e 'select 8*5' | awk ‘NR==2{print}’ 做复杂运算这是一个选择,但很少有人这么做,因为想用mysql,必须开启mysql访问。
做数学运算python也可以完成。直接调用python就好了,因为系统只要装好了,python百分之百就是装着的,不需要二次安装,yum就是python写的,只要yum能用python就可以用,python的计算能力更强,比mysql还强,shell完不成的可以直接调用python。
python -c 'print 5*9/2' 命令行里可以写也可以写到shell脚本里而且它计算小数的能力非常厉害
跟表有关系的四则运算
select name,post as aa,salary+1000 as salary from employee5; 修改别名 加薪 post 改为aa
mysql>select 5>3; 做关系运算,会拿这种东西当条件用
别名
mysq>select name as xingming,pass from db2.t3
定义显示格式
concat() 函数用于连接字符串,或者可以把不同的字符串连在一起
SELECT CONCAT(name, ' annual salary: ', salary*14) AS Annual_salary FROM employee5;
单条件查询
select name,salary,sex from employee5 where salary=2200 and sex="male"; 工资是2200的男生
select name,salary,sex from employee5 where not salary=2200 and not sex="male"; 所有工资不是2200并且不是男生的 取反
多条件查询
mysql>select math from db1.t1 where math>50 and math<600 范围
mysql>mysqlselect math from db1.t1 where not math>50;
关键字BETWEEN AND
select name,salary,sex from employee5 where salary between 5000 and 8000;
select name,salary,sex from employee5 where salary>=5000 and salary<=8000;
关键字IS NULL
NULL说明:
1、 等价于没有任何值、是未0知数。
2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、比较时使用关键字用"is null"和"is not null"。
5、排序时比其他数据都小(索引默认是降序排列,小→大),所以NULL值总是排在最前。
这一块记住一件事就行,要么等于空的时候,比如abc是一个字段,abc="" null
Null和引号里的空是不一样的?
Null是不占内存空间的,它最小是真空。引号里的空是占内存空间的。
它也可以当做条件,比如哪个字段是空的可以用where t1 is null;(where 后面+字段名称 或者是非空的is not null)
排序查询
看里面有没有能按大小排序的列,如果有,就可以用排序查询,比如按工资进行排序,order by
mysql> select china from t1 order by china; 默认是升序的
mysql> select china from t1 order by china desc; 这里desc降序全称descending
mysql> select china from t1 order by china desc limit 3; 取前几个,默认初始位置为0
mysql> select china from t1 order by china desc limit 1,3; 取前几个
按多列排序:
select * from emp order by hire_date desc,salary desc;先按入职时间,再按薪水排序
限制查询的记录数
SELECT * FROM employee5 ORDER BY salary DESC LIMIT 3,5; //从第4条开始,共显示5条
分组查询
mysql> select count(gender),gender from t3 group by gender; 不适用于所有情况,比如,按男女分组,用的时候看场景
SELECT dep_id,GROUP_CONCAT(name) FROM employee5 GROUP BY dep_id; 按部门id分组
模糊查询
挺重要,将来在搞,备份恢复,和权限相关时就会用到,mysql里的通配符)
在shell里的通配符 ?代表任意单个字符,在这里下划线代表任意单个字符,% 所有字符 *
mysql> select * from t1 where china like '%0%'; like像,模糊查询
正则查询
mysql> select name,salary,sex from employee5 where sex regexp 'e$'; 以e结尾的
mysql> select name,salary,sex from employee5 where sex regexp '^m'; 以m开头的
子查询
mysql> select name from t2 where math=(select max(math) from t2);函数
count() 数数
max() 最大值
min() 最小值
avg() 平均值
database() 查看当前数据库
user() 当前用户
now() 现在的时间
sum() 取和,比如想知道所有人的工资之后是多少
password() 设置密码的时候可能用到,用来给字符串加密的
md5() 用来判断某一个文件的内容是不是被修改了
比如系统里面,b.txt它就会有一个md5sum,里面的值是永远不会发生变化的,除非这个文件的内容发生变化。多了一个a一旦发生了变化,再去查md5值就发生了变化。可以用来判断某一个文件的内容是不是被人修改了。比如现在test目录下面有好多文件,我要去监控里面的文件是不是被人修改过,五分钟监控一次。这时就会用到md5sum。
power() select power(3,2); 3的2次方