又开新坑了......重新学一遍MySQL之后在学一下SQLSever。

一, MySQL简介

mySQL

 

(关系型数据库管理系统)

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

 二, SQL的常用命令

2.1 SQL的分类

数据查询语言(DQL-Data Query Language)  

代表关键字:select

数据操纵语言(DML-Data Manipulation Language)

代表关键字:insert,delete,update

数据定义语言(DDL-Data Definition Language)

代表关键字:create ,drop,alter,

事务控制语言(TCL-Transactional Control Language)

代表关键字:commit ,rollback;

数据控制语言(DCL-Data Control Language)

代表关键字:grant,revoke.

 

2.2 常用命令

 创建数据库 

create database 数据库名称;

create database  bjpowernode;

use 数据库名称

use bjpowernode;

在数据库中建立表,因此创建表的时候必须要先选择数据库。

查询当前使用的数据库

select  database();

查询数据库版本也可以使用

select  version();

 

终止一条语句

如果想要终止一条正在编写的语句,可键入\c。

退出mysql

 

可使用\q、QUIT或EXIT:

如:

mysql> \q (ctrl+c)

2.3 查看“演示数据”的表结构

查看和指定现有的数据库

show databases;

指定当前缺省数据库

use <库名称>;

查看当前使用的库

select database();

查看当前库中的表

show tables;

查看其他库中的表

show tables from <库名>;

查看表的结构

desc <表名>;

查看表的创建语句

show create table <表名称>;

2.4 简单的查询

查询一个字段

  • 查询员工姓名

select ename from emp;

Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开.

查询多个字段

select empno, ename from emp;

 

  • 查询员工的编号和姓名

查询多个字段,select中的字段采用逗号间隔即可,最后一个字段,也就是在from前面的字段不能使用逗号了。

查询全部字段

可以将所有的字段放到select语句的后面,这种方案不方便,但是比较清楚,我们可以采用如下便捷的方式查询全部字段。但不推荐使用,影响效率。

select * from emp;

计算员工的年薪

列出员工的编号,姓名和年薪

select empno, ename, sal*12 from emp;

将查询出来的字段显示为中文

select empno as ‘员工编号’, ename as ‘员工姓名’, sal*12 as ‘年薪’ from emp;

注意:字符串必须添加单引号 | 双引号,最好用单引号(SQL通用)。

select empno  "员工编号", ename  "员工姓名", sal*12  "年薪" from emp;

 

 2.5 条件查询

条件查询需要用到where语句,where必须放到from语句表的后面

支持如下运算符

运算符

说明

=

等于

<>或!=

不等于

<

小于

<=

小于等于

>

大于

>=

大于等于

between … and ….

两个值之间,等同于 >= and <=

is null

为null(is not null 不为空)

and

并且

or

或者

in

包含,相当于多个or(not in不在这个范围中)

not

not可以取非,主要用在is 或in中

like

like称为模糊查询,支持%或下划线匹配

%匹配任意个字符

下划线,一个下划线只匹配一个字符

 等号操作符

  • 查询薪水为5000的员工

select empno, ename, sal from emp where sal=5000;

  • 查询job为MANAGER的员工 

select empno, ename from emp where job=‘manager’;

使用引号标识字符串,不然报错。

<>操作符

  • 查询薪水不等于5000的员工

select empno, ename, sal from emp where sal <> 5000;

以下写法等同于以上写法,建议使用第一种写法

select empno, ename, sal from emp where sal != 5000;

  • 查询工作岗位不等于MANAGER的员工

select empno, ename from emp where job <> 'MANAGER';

between  and 操作符

  • 查询薪水为1600到3000的员工(第一种方式,采用>=和<=)

select empno, ename, sal from emp where sal >= 1600 and sal <= 3000;

  • 查询薪水为1600到3000的员工(第二种方式,采用between … and …)

select empno, ename, sal from emp where sal between 1600 and 3000;

关于between … and …,它是包含最大值和最小值的(闭区间)

is null

  • Null为空,但不是空串,为null可以设置这个字段不填值,如果查询为null的字段,采用is null
  • 查询津贴为空的员工

 select * from emp where comm=null;

以上也无法查询出符合条件的数据,因为null类型比较特殊,必须使用 is来比较

select * from emp where comm is null;

and

and表示并且的含义,表示所有的条件必须满足

  • 工作岗位为MANAGER,薪水大于2500的员工0

select * from emp where job='MANAGER' and sal > 2500;

or

or,只要满足条件即可,相当于包含

  • 查询出job为manager或者job为salesman的员工

select * from emp where job='MANAGER' or job='SALESMAN';

表达式的优先级

  • 查询薪水大于1800,并且部门代码为20或30的员工(错误的写法)

select * from emp where sal > 1800 and deptno = 20 or deptno = 30;

以上输出不是预期结果,薪水小于1800的数据也被查询上来了,原因是表达式的优先级导致的,首先过滤sal > 1800 and deptno = 20,然后再将deptno = 30员工合并过来,所以是不对的,和java里一样用括号包起来就能解决问题。

  • 查询薪水大于1800,并且部门代码为20或30的(正确的写法)

select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);

关于运算符的问题:不用记,没有把握尽量采用括号

in

in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些

  • 查询出job为manager或者job为salesman的员工

select * from emp where job in ('manager','salesman');

  • 查询出薪水包含1600和薪水包含3000的员工

select * from emp where sal in(1600, 3000);

not

  • 查询出薪水不包含1600和薪水不包含3000的员工(第一种写法)

select * from emp where sal <> 1600 and sal <> 3000;

  • 查询出薪水不包含1600和薪水不包含3000的员工(第二种写法)

select * from emp where not (sal = 1600 or sal = 3000);

  • 查询出薪水不包含1600和薪水不包含3000的员工(第三种写法)

select * from emp where sal not in (1600, 3000);

  • 查询出津贴不为null的所有员工

select * from emp where comm is not  null;

like

  • Like可以实现模糊查询,like支持%和下划线匹配
  • 查询姓名以M开头所有的员工

select * from emp where ename like 'M%';

  • 查询姓名以N结尾的所有的员工

select * from emp where ename like '%N';

  • 查询姓名中包含O的所有的员工

select * from emp where ename like '%O%';

  • 查询姓名中第二个字符为A的所有员工

select * from emp where ename like '_A%';

%匹配任意字符出现的个数

下划线只匹配一个字符

Like 中的表达式必须放到单引号中|双引号中,以下写法是错误的:

select * from emp where ename like _A%