SQL学习之常用的数据库命令和基础查询
一、常用命令:
1. 查看当前所有的数据库show databases 2. 打开指定的库use 库名3. 查看当前库的所有表show tables4. 查看其他库的所有表show tables from 库名5. 创建表create table 表名(列名,列类型列名,列类型);
6. 查看表结构desc 表名7. 查看服务器的版本:方式一:登录到mysql服务端 select version();方式二:没有登陆到myusql服务器 mysql --version
二、MySQL语法规范
-
不区分大小写,建议关键字大写且不能分行,表名,列名小写
-
SQL可以卸载一行或多行,未来提高可读性,各子句分行写,必要时使用缩进
-
每条命令以;或\g 或\G结束
-
关于标点符号
- 必须保证所有的()、单引号、双引号是成对结束的
- 必须使用英文状态写的半角输入方式
- 字符串型和日期时间性的数据可以使用单引号(‘ ’)表示
- 列的别名,尽量使用双引号(“ ” ),而且不建议省略as
-
注释
- 单行注释:*注释文字
- 单行注释:-- 注释文字
- 多行注释:/* 注释文字 */
-
MySQL在linux环境下是大小写敏感的
- 数据库名,表名,表的别称,变量名是严格区分大小写的
- 关键字,函数名,列名(或字段名),列的别名(字段名)是忽略大小写的
SQL语言的分类:
DDL: 数据定义语言 CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE
DML: 数据操作语言 INSERT \ DELETE \ UPDATE \ SELECT
DCL: 数据控制语言 COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE
三、数据的导入
在命令行客户端登录mysql,使用source指令导入
第一种(在MySQL内部): msyql> source d:mysqldb.sql
第二种(在命令行界面):>mysql -u root -p 数据库名 < 路径名 数据库名.sql
数据库的导出
> msyqldump -u root -p 数据库名 > 路径名 数据库名.sql
需要密码
四、基本的SELECT…FROM结构
msyql>select 字段1,字段2,字段3,字段4... from 表名
#查询表中字段信息
msyql>select * from 表名
# * :表中所有字段的信息
#列的别名
# as:全称:alias(别名),可以省略
#列的别名可以使用双引号""引起来#去除重复行
#distinct#空值参与运算
#1.空值:null
#2. null不等同于0,'','null'
#3. 空值参与运算#查询常数#显示表结构
describe 表名; #显示了表中字段的详细信息
desc 表名#过滤条件
where
条件语句:
#语法:
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
使用WHERE子句,将不满足条件的行过滤掉
WHERE子句紧跟FROM子句
查询之前需要转到表所在的库
USE myemployees
基础查询:
语法:select 查询列表 from 表名:
类似于:System.out.println(打印东西);
特点:
-
查询列表可以是:包中的字段、常量值、表达式、函数
-
查询的结构是严格虚拟的表格
-
查询表中的单个字段
SELECT last_name FROM employees; -
查询表中的多个字段
SELECT last_name,salary,email FROM employees; -
查询表中的所有字段
SELECT * FROM employees; -
查询常量值
SELECT 100; SELECT 'john'; -
查询表达式
SELECT 100&99; -
查询函数
SELECT VERSION(); -
起别名
- 便于理解
- 如果要查询的字段有重名的情况,使用别名可以区分开来
#方法一 使用as SELECT 100 %99 AS 结果; #方法二 使用空格 SELECT last_name 姓,first_name 名 FROM employeers; #案例:查询salary。显示结果为 out put SELECT salary AS out put FROM employees;(此时需要在 out put 的两边加上双引号) -
去重
案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees -
+号
案例:员工名和员工姓连接成一个字段,并显示为姓名
SELECT last_name+first_name AS 姓名 FROM employees; #会失败 #可以使用concat函数来进行两个字段的拼接 SELECT CONCAT()
条件查询:
语法: select 查询列表 from 表名 where 筛选条件;
分类:
一、按条件表达式筛选
条件运算符:> < = != <> >= <=
注意:<> 和 != 都是不等于的意思
建议:如果你写的 SQL 代码将来可能迁移到其他数据库(如 Oracle、SQL Server),请用 <>。
如果只在 MySQL 环境里写脚本或程序,!= 也完全没问题。
二、按逻辑表达式筛选
逻辑运算符:
| && | and | 两个条件都为true,结果为true,反之为false |
|---|---|---|
| || | or | 只要有一个条件为true,结果为true,反之为false |
| ! | not | 如果连接的条件本身为false,则结果为true |
建议:在sql语言中使用第二列的语法,便于阅读
三、模糊查询
-
like
-
特点:一般和通配符搭配使用 %
-
通配符 :
%:任意多个字符,包含0个字符
_:任意单个字符
-
-
-
between and
- 使用between and 可以提高语句的简洁度
- 包含临界值
- 两个临界值不要调换顺序
-
in
- 含义:判断某字段的值是否属于in列表中的莫一项
- 特点:
- 使用in提高语句简洁度
- in列表的值类型必须一致或兼容
-
is null
- !=或<>不能判断null
- is null可以处理null值
-
<=> 安全等于
- 安全运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是‘<=>’可用来对NULL进行判读,在两个操作数均为NULL时,其返回值为1,而不是NULL,当一个操作数为NULL时,其返回值为0,而不是NULL
排序查询
语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序列表 【asc|desc】
特点:
- asc代表的是升序,desc代表的是降序(如果不写默认是升序)
- order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
- order by 子句一般是放在查询语句的最后面,limit子句除外
