数据库:
英文单词Database,简称DB。按照一定格式存储数据的一些文件的组合。
顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
数据库管理系统:
DatabaseManagement,简称DBMS。
数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。
常见的数据库管理系统:
MySQL、Oracle、MS SqlServer、DB2、sybase等…
SQL:结构化查询语言
程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查 *** 作。
SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。
他们之间的关系是什么?三者之间的关系?
DBMS–执行–> SQL -- *** 作–> DB
先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS对SQL语句进行执行,最终来完成数据库的数据管理。
MySQL的服务在哪里?计算机–>右键–>管理–>服务和应用程序–>服务–>找mysql服务
MySQL的服务,默认是“启动”的状态,只有启动了mysql才能用。
默认情况下是“自动”启动,自动启动表示下一次重启 *** 作系统的时候
自动启动该服务。
可以在服务上点击右键:
启动
重启服务
停止服务
…
还可以改变服务的默认配置:
服务上点击右键,属性,然后可以选择启动方式:
自动(延迟启动)
自动
手动
禁用
语法:
net stop 服务名称;
net start 服务名称;
其它服务的启停都可以采用以上的命令。
mysql安装了,服务启动了,怎么使用客户端登录mysql数据库呢?使用bin目录下的mysql.exe命令来连接mysql数据库服务器
本地登录(显示编写密码的形式):
C:UsersAdministrator>mysql -uroot -p123456 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 Server version: 5.5.36 MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
本地登录(隐藏密码的形式):
C:UsersAdministrator>mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.5.36 MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>mysql常用命令:
退出mysql :exit
查看mysql中有哪些数据库?
show databases;
注意:以分号结尾,分号是英文的分号。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
mysql默认自带了4个数据库。
怎么选择使用某个数据库呢?
mysql> use test;
Database changed
表示正在使用一个名字叫做test的数据库。
怎么创建数据库呢?
mysql> create database node;
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | node | | mysql | | performance_schema | | test | +--------------------+
查看某个数据库下有哪些表?
mysql> show tables;
注意:以上的命令不区分大小写,都行。
查看mysql数据库的版本号:mysql> select version();
+-----------+ | version() | +-----------+ | 8.0.28 | +-----------+数据库当中最基本的单元
数据库当中最基本的单元是表:table
什么是表table?为什么用表来存储数据呢?
姓名 性别 年龄(列:字段) --------------------------- 张三 男 20 ------->行(记录) 李四 女 21 ------->行(记录) 王五 男 22 ------->行(记录)
数据库当中是以表格的形式表示数据的。
因为表比较直观。
任何一张表都有行和列:
行(row):被称为数据/记录。
列(column):被称为字段。
姓名字段、性别字段、年龄字段。
了解一下:
每一个字段都有:字段名、数据类型、约束等属性。
字段名可以理解,是一个普通的名字,见名知意就行。
数据类型:字符串,数字,日期等
约束:约束也有很多,其中一个叫做唯一性约束,
这种约束添加之后,该字段中的数据不能重复。
SQL语句有很多,最好进行分门别类,这样更容易记忆。
分为:
DQL: 数据查询语言(凡是带有select关键字的都是查询语句) select... DML: 数据 *** 作语言(凡是对表当中的数据进行增删改的都是DML) insert delete update insert 增 delete 删 update 改 这个主要是 *** 作表中的数据data。 DDL: 数据定义语言 凡是带有create、drop、alter的都是DDL。 DDL主要 *** 作的是表的结构。不是表中的数据。 create:新建,等同于增 drop:删除 alter:修改 这个增删改和DML不同,这个主要是对表结构进行 *** 作。 TCL: 事务控制语言 包括: 事务提交:commit; 事务回滚:rollback; DCL: 是数据控制语言。 例如:授权grant、撤销权限revoke....常用命令 查看 msyql 版本
• MySQL 程序选项具有以下两种通用形式:
– 长选项,由单词之前加两个减号组成
– 短选项,由单个字母之前加一个减号组成
C:UsersAdministrator>mysql --version mysql Ver 14.14 Distrib 5.5.36, for Win32 (x86) C:UsersAdministrator>mysql -V mysql Ver 14.14 Distrib 5.5.36, for Win32 (x86)创建数据库
create database 数据库名称;
create database bjpowernode;
use 数据库名称
use bjpowernode;
在数据库中建立表,因此创建表的时候必须要先选择数据库。
查询当前使用的数据库select database();
查询数据库版本也可以使用
select version();
如果想要终止一条正在编写的语句,可键入c。
退出 mysql可使用q、QUIT 或 EXIT:
如:mysql> q (ctrl+c)
show tables from
desc ;
查看表的创建语句show create table ;
简单查询 引入三张表 查询一个字段select 字段名 from 表名; 其中要注意: select和from都是关键字。 字段名和表名都是标识符。 强调: 对于SQL语句来说,是通用的, 所有的SQL语句以“;”结尾。 另外SQL语句不区分大小写,都行。
例如:查询部门名字
查询多个字段使用逗号隔开“,”
查询部门编号和部门名?
select deptno,dname from dept;
第一种方式:可以把每个字段都写上 select a,b,c,d,e,f... from tablename; 第二种方式:可以使用*(效率很低,可读性差,在实际开发中不建议) select * from dept;给查询的列起别名
select deptno,dname as deptname from dept;
使用as关键字起别名。 注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname 记住:select语句是永远都不会进行修改 *** 作的。(因为只负责查询) as关键字可以省略吗?可以的 mysql> select deptno,dname deptname from dept; 假设起别名的时候,别名里面有空格,怎么办? mysql> select deptno,dname dept name from dept; DBMS看到这样的语句,进行SQL语句的编译,不符合语法,编译报错。 怎么解决? select deptno,dname 'dept name' from dept; //加单引号 select deptno,dname "dept name" from dept; //加双引号 注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。 再次强调:数据库中的字符串都是采用单引号括起来。这是标准的,双引号不标准。计算员工年薪(sal * 12) 条件查询
不是将表中所有数据都查出来。是查询出来符合条件的。
语法格式:
select 字段1,字段2,字段3.... from 表名 where 条件;
= 等于 查询薪资等于800的员工姓名和编号? select empno,ename from emp where sal = 800; 查询SMITH的编号和薪资? select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号 <>或!= 不等于 查询薪资不等于800的员工姓名和编号? select empno,ename from emp where sal != 800; select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号 < 小于 查询薪资小于2000的员工姓名和编号? mysql> select empno,ename,sal from emp where sal < 2000; +-------+--------+---------+ | empno | ename | sal | +-------+--------+---------+ | 7369 | SMITH | 800.00 | | 7499 | ALLEN | 1600.00 | | 7521 | WARD | 1250.00 | | 7654 | MARTIN | 1250.00 | | 7844 | TURNER | 1500.00 | | 7876 | ADAMS | 1100.00 | | 7900 | JAMES | 950.00 | | 7934 | MILLER | 1300.00 | +-------+--------+---------+ <= 小于等于 查询薪资小于等于3000的员工姓名和编号? select empno,ename,sal from emp where sal <= 3000; > 大于 查询薪资大于3000的员工姓名和编号? select empno,ename,sal from emp where sal > 3000; >= 大于等于 查询薪资大于等于3000的员工姓名和编号? select empno,ename,sal from emp where sal >= 3000; between … and …. 两个值之间, 等同于 >= and <= 查询薪资在2450和3000之间的员工信息?包括2450和3000 第一种方式:>= and <= (and是并且的意思。) select empno,ename,sal from emp where sal >= 2450 and sal <= 3000; +-------+-------+---------+ | empno | ename | sal | +-------+-------+---------+ | 7566 | JonES | 2975.00 | | 7698 | BLAKE | 2850.00 | | 7782 | CLARK | 2450.00 | | 7788 | SCOTT | 3000.00 | | 7902 | FORD | 3000.00 | +-------+-------+---------+ 第二种方式:between … and … select empno,ename,sal from emp where sal between 2450 and 3000; 注意: 使用between and的时候,必须遵循左小右大。 between and是闭区间,包括两端的值。 is null 为 null(is not null 不为空) 查询哪些员工的津贴/补助为null? mysql> select empno,ename,sal,comm from emp where comm = null; Empty set (0.00 sec) mysql> select empno,ename,sal,comm from emp where comm is null; +-------+--------+---------+------+ | empno | ename | sal | comm | +-------+--------+---------+------+ | 7369 | SMITH | 800.00 | NULL | | 7566 | JonES | 2975.00 | NULL | | 7698 | BLAKE | 2850.00 | NULL | | 7782 | CLARK | 2450.00 | NULL | | 7788 | SCOTT | 3000.00 | NULL | | 7839 | KING | 5000.00 | NULL | | 7876 | ADAMS | 1100.00 | NULL | | 7900 | JAMES | 950.00 | NULL | | 7902 | FORD | 3000.00 | NULL | | 7934 | MILLER | 1300.00 | NULL | +-------+--------+---------+------+ 10 rows in set (0.00 sec) 注意:在数据库当中null不能使用等号进行衡量。需要使用is null 因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。 查询哪些员工的津贴/补助不为null? select empno,ename,sal,comm from emp where comm is not null; +-------+--------+---------+---------+ | empno | ename | sal | comm | +-------+--------+---------+---------+ | 7499 | ALLEN | 1600.00 | 300.00 | | 7521 | WARD | 1250.00 | 500.00 | | 7654 | MARTIN | 1250.00 | 1400.00 | | 7844 | TURNER | 1500.00 | 0.00 | +-------+--------+---------+---------+ and 并且 查询工作岗位是MANAGER并且工资大于2500的员工信息? select empno,ename,job,sal from emp where job = 'MANAGER' and sal > 2500; +-------+-------+---------+---------+ | empno | ename | job | sal | +-------+-------+---------+---------+ | 7566 | JonES | MANAGER | 2975.00 | | 7698 | BLAKE | MANAGER | 2850.00 | +-------+-------+---------+---------+ or 或者 查询工作岗位是MANAGER和SALESMAN的员工? select empno,ename,job from emp where job = 'MANAGER'; select empno,ename,job from emp where job = 'SALESMAN'; select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; +-------+--------+----------+ | empno | ename | job | +-------+--------+----------+ | 7499 | ALLEN | SALESMAN | | 7521 | WARD | SALESMAN | | 7566 | JonES | MANAGER | | 7654 | MARTIN | SALESMAN | | 7698 | BLAKE | MANAGER | | 7782 | CLARK | MANAGER | | 7844 | TURNER | SALESMAN | +-------+--------+----------+ and和or同时出现的话,有优先级问题吗? 查询工资大于2500,并且部门编号为10或20部门的员工? select * from emp where sal > 2500 and deptno = 10 or deptno = 20; 分析以上语句的问题? and优先级比or高。 以上语句会先执行and,然后执行or。 以上这个语句表示什么含义? 找出工资大于2500并且部门编号为10的员工,或者20部门所有员工找出来。 select * from emp where sal > 2500 and (deptno = 10 or deptno = 20); and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号” 以后在开发中,如果不确定优先级,就加小括号就行了。 in 包含,相当于多个 or (not in 不在这个范围中) 查询工作岗位是MANAGER和SALESMAN的员工? select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; select empno,ename,job from emp where job in('MANAGER', 'SALESMAN'); +-------+--------+----------+ | empno | ename | job | +-------+--------+----------+ | 7499 | ALLEN | SALESMAN | | 7521 | WARD | SALESMAN | | 7566 | JonES | MANAGER | | 7654 | MARTIN | SALESMAN | | 7698 | BLAKE | MANAGER | | 7782 | CLARK | MANAGER | | 7844 | TURNER | SALESMAN | +-------+--------+----------+ 注意:in不是一个区间。in后面跟的是具体的值。 查询薪资是800和5000的员工信息? select ename,sal from emp where sal = 800 or sal = 5000; select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。 +-------+---------+ | ename | sal | +-------+---------+ | SMITH | 800.00 | | KING | 5000.00 | +-------+---------+ select ename,sal from emp where sal in(800, 5000, 3000); // not in 表示不在这几个值当中的数据。 select ename,sal from emp where sal not in(800, 5000, 3000); +--------+---------+ | ename | sal | +--------+---------+ | ALLEN | 1600.00 | | WARD | 1250.00 | | JonES | 2975.00 | | MARTIN | 1250.00 | | BLAKE | 2850.00 | | CLARK | 2450.00 | | TURNER | 1500.00 | | ADAMS | 1100.00 | | JAMES | 950.00 | | MILLER | 1300.00 | +--------+---------+ not 可以取非,主要用在 is 或 in 中 is null is not null in not in模糊查询
like 称为模糊查询,支持%或下划线匹配 %匹配任意多个字符 下划线:任意一个字符。 (%是一个特殊的符号,_ 也是一个特殊符号) 找出名字中含有O的? mysql> select ename from emp where ename like '%O%'; +-------+ | ename | +-------+ | JonES | | SCOTT | | FORD | +-------+ 找出名字以T结尾的? select ename from emp where ename like '%T'; 找出名字以K开始的? select ename from emp where ename like 'K%'; 找出第二个字每是A的? select ename from emp where ename like '_A%'; 找出第三个字母是R的? select ename from emp where ename like '__R%'; t_student学生表 name字段 ---------------------- zhangsan lisi wangwu zhaoliu jack_son 找出名字中有“_”的? select name from t_student where name like '%_%'; //这样不行。 mysql> select name from t_student where name like '%_%'; // 转义字符。 +----------+ | name | +----------+ | jack_son | +----------+排序数据 单一字段排序
排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升
序,如果存在 where 子句那么 order by 必须放到 where 语句的后面
查询所有员工薪资,排序? select ename,sal from emp order by sal; // 默认是升序!!! +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | WARD | 1250.00 | | MARTIN | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JonES | 2975.00 | | FORD | 3000.00 | | SCOTT | 3000.00 | | KING | 5000.00 | +--------+---------+
怎么降序? 指定降序: select ename,sal from emp order by sal desc; +--------+---------+ | ename | sal | +--------+---------+ | KING | 5000.00 | | SCOTT | 3000.00 | | FORD | 3000.00 | | JonES | 2975.00 | | BLAKE | 2850.00 | | CLARK | 2450.00 | | ALLEN | 1600.00 | | TURNER | 1500.00 | | MILLER | 1300.00 | | MARTIN | 1250.00 | | WARD | 1250.00 | | ADAMS | 1100.00 | | JAMES | 950.00 | | SMITH | 800.00 | +--------+---------+ 指定升序? select ename,sal from emp order by sal asc; +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | WARD | 1250.00 | | MARTIN | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JonES | 2975.00 | | FORD | 3000.00 | | SCOTT | 3000.00 | | KING | 5000.00 | +--------+---------+
综合案例:找出工资在1250到3000之间的员工信息,并按工资降序排列
select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
多个字段排序查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话, 再按照名字升序排列。 select ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。 +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | MARTIN | 1250.00 | | WARD | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JonES | 2975.00 | | FORD | 3000.00 | | SCOTT | 3000.00 | | KING | 5000.00 | +--------+---------+注意
关键字顺序不能变:
select ... from ... where ... order by ...
以上语句的执行顺序必须掌握: 第一步:from 第二步:where 第三步:select 第四步:order by(排序总是在最后执行!)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)