MySQL:

查:

#查看表中所有数据

select * from  表名;

#查看部分字,查看部分列

select sname,major   from 表名 ;

#查看所有列,所有行

select * from 表名 where major ='JavaEE';

#查看部分行,部分列

select sname,major  from 表名  where  major ='JavaEE';

 

**

select 语句,可以包含五种句子:

依次是where、roup by、aving、rder by、imit 必须按照这个顺序

****

别名AS:
  说明:

    1、可以给字段取别名、可以给表明起名

    2、AS可以省略

    3、如果给字段取别名,如果别名中包含特殊符号,例如(空格

    )等,建议给别名加上双引导或单引导

    4、如果是给表名取别名,那么不能加双引导或单引导,也不能有特殊符号“空格”

    等

    5、建议别名简短,见名知意

#一条起别名

update  表名  as 别名;

#

update 表名  as 别名,表名  as 别名 set  别名.dname='要修改的数据';

#查询姓名以及手机号

select  name as '姓名',tel as '手机号’  from  表名;

 

去重:

distinct

#查询某个数据(并去重复的)

 

select distinct   要查询的数据    from  表名;

#统计某个数据中员工有几个部门

select count(distinct  数据名)from  表名;

 

 

着重号`  `:

 

  说明:

    1、可以给字段或表名加着重号

    2、如果字段名或表名与关键字一样更要加着重号

 

MySQL运算符:

1、

算术运算符:+ 、 *  、-  、/(div) 、%(mod)

 

例如:

#查询所有数据的id 为偶数的数据(%(mod))

select * from 表名 where  id  % 2=0;

select * from 表名 where  数据名 mod 2=0;

 

 

2、

 

比较运算符:=,>,<,>=,<=,!=(不等于<>),<=>(安全等于)

#查询basic_salary!=10000
SELECT eid,basic_salary FROM t_salary WHERE basic_salary != 10000;
SELECT eid,basic_salary FROM t_salary WHERE basic_salary <> 10000;

 

#查询basic_salary=10000,注意在Java中比较是==
SELECT eid,basic_salary FROM t_salary WHERE basic_salary = 10000;

 

#查询commission_pct等于0.40
SELECT eid,commission_pct FROM t_salary WHERE commission_pct = 0.40;
SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> 0.40;

 

#查询commission_pct等于NULL
SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NULL;
SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> NULL;

 

#查询commission_pct不等于NULL
SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NOT NULL;
SELECT eid,commission_pct FROM t_salary WHERE NOT commission_pct <=> NULL;

 

3、

逻辑运算符:&&(与)and   、 or  (或)||  、not  (非)! 、(异或)XOR

 

#查询性别男,并且在90以前出生的员工
SELECT * FROM t_employee WHERE gender='男' AND birthday<'1990-01-01';

 

#查询职位编号job_id是1或2的员工
SELECT * FROM t_employee WHERE job_id =1 OR job_id = 2;

 

#查询基本薪资是在9000-12000之间的员工编号和基本薪资
SELECT eid,basic_salary FROM t_salary WHERE basic_salary >=9000 AND basic_salary<=12000;

 

#查询基本薪资不在9000-12000之间的员工编号和基本薪资
SELECT eid,basic_salary FROM t_salary WHERE NOT (basic_salary >=9000 AND basic_salary<=12000);
SELECT eid,basic_salary FROM t_salary WHERE basic_salary <9000 OR basic_salary>12000;

 

范围和集合:

#between ....and....  、和  not  between  .....and.....

in(集合) 和 not  in(......)

 

#查询基本薪资是在9000-12000之间的员工编号和基本薪资
SELECT eid,basic_salary FROM t_salary WHERE basic_salary BETWEEN 9000 AND 12000;

 

#查询eid是1,3,5的基本工资
SELECT eid,basic_salary FROM t_salary WHERE eid IN (1,3,5);

 

 

模糊查询:

 

  说明:

    like  和 通配符  一起使用

    like _  匹配单个字符

    like %  匹配任意个字符

 

#查询名字中有'冰'字的员工信息
SELECT * FROM t_employee WHERE ename LIKE '%冰%';

 

#查询姓李的员工信息
SELECT * FROM t_employee WHERE ename LIKE '李%';

 

#查询姓李,名字就一个字的员工信息
SELECT * FROM t_employee WHERE ename LIKE '李_';

 

#查询李冰冰的信息
SELECT * FROM t_employee WHERE ename LIKE '李冰冰';

 

 

通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值:

    mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

    mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

 

NULL值判断与计算处理:

 

#NULL值判断与处理

#查询奖金百分比不为空的员工编号

SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NOT NULL;

 

#查询奖金百分比为空的员工编号
SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NULL;

 

#关于null值计算
#所有运算符遇到null都是null

#计算实际的薪资:  basic_salary + salary * 奖金百分比
#函数:IFNULL(表达式,用什么值代替)
SELECT eid,basic_salary + performance_salary *(1+ commission_pct) FROM t_salary;#错误的
SELECT eid,basic_salary + performance_salary *(1+ IFNULL(commission_pct,0)) FROM t_salary;

 

#<=>安全等于
#查询奖金百分比为空的员工编号
SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> NULL;

 

 

关联查询,联合查询

 

作用:从两张或多张表中,取出有关联的数据。

 

关联查询一共有几种情况:

  1、内连接:inner join \ cross join

  2、外连接:

      1、左外连接: left outer join

      2、右外连接: right  outer join

      3、全外连接: full outer  join

  3、自连接:当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表

   以代表不同的意义

  

说明:

  1、连接n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件

  2、当两个关联查询的表如果有字段名字相同,并且要查询中涉及该关联字段,那么需要使用表名前缀加以区分

  3、当如果表名较长时,可以给表取别名,简化sql语句

 

笛卡尔积:

 

定义: 将两(或多)个表的所有行进行组合,连接后的行数为两(或多)个表的乘积数

 

在MySQL中如下情况会出现笛卡尔积,主要是因为缺少关联条件或者关联条件不准确

 

注:外连接必须写关联条件,否则报语法错误

 

语句例子:

 

#笛卡尔积
#查询员工姓名和所在部门名称
SELECT ename,dname FROM t_employee,t_department;
SELECT ename,dname FROM t_employee INNER JOIN t_department;
SELECT ename,dname FROM t_employee CROSS JOIN t_department;
SELECT ename,dname FROM t_employee JOIN t_department;

 

关联条件:

 

表连接的约束条件可以有三种方式:where,on,using

  where:适用于所有关联查询

  on: 只能和join 一起使用,只能写关联条件。虽然关联条件可以并到where中和其他条件一起写,但分开写可读性更好。

  using: 只能和join一起使用,而且要求两个字段在关联表中名称一致。而且只能表示关联字段值相等

 

#关联条件

#把关联条件写在where后面

select  ename,dname  from  表名1,表名2  where  表名1.(共同点)=表名二.(共同点);

 

#把关联条件写在on后面,只能和JOIN一起使用

#而且两个表中的关联字段必须名称相同,而且只能表示=
#查询员工姓名与基本工资

SELECT ename,basic_salary FROM t_employee INNER JOIN t_salary USING(eid);

 

#n张表关联,需要n-1个关联条件
#查询员工姓名,基本工资,部门名称
SELECT ename,basic_salary,dname FROM t_employee,t_department,t_salary
WHERE t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;

 

SELECT ename,basic_salary,dname FROM t_employee INNER JOIN t_department INNER JOIN t_salary 

ON t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;

 

内连接(inner join):

 

有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行格式:

       隐式:select   [cols_list]  from  表1,表2 where [condition]

       显式:select   [cols_list]  from  表1  inner  join  表2  on [关联条件]   where [其他筛选条件]