MySQL SQL语法基础

从系统架构来看,MySql数据库系统从大到小依次是数据库服务器数据库数据表数据表中行与列

增删改

创建数据库

数据库创建方式
#方式1:创建数据库
CREATE DATABASE 数据库名;
#方式2:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
#方式3:判断数据库是否已经存在,不存在则创建数据库(推荐)
CREATE DATABASE IF NOT EXISTS 数据库名;

使用数据库

# 查看当前所有的数据库
SHOW DATABASES# 有一个s,代表多个数据库

# 查看当前正在使用的数据库
SELECT DATABASE()# 使用的MySql中一个的全局变量

# 查看指定库下所有的表
SHOW TABLES FROM 数据库名

# 查看数据库的创建信息
SHOW CREATE DATABASE 数据库名
SHOW CREATE DATABASE 数据库名\G

# 使用/切换数据库
USE 数据库名

修改数据库

# 更改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集

删除数据库

# 删除指定数据库
DROP DATABASE 数据库名
DROP DATABASE IF EXISTS 数据库名(推荐)

创建表

前提:
必须有CREATE TABLE权限

方式一 直接创建

CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值],
字段2, 数据类型 [约束条件] [默认值],
字段3, 数据类型 [约束条件] [默认值],
……
[表约束条件]
);

注意:
1.加上了IF NOT EXISTS,则表示:如果当前数据库中不存在该表则创建数据表,如果存在则不创建数据表
2.创建时,必须指明:表名、列名、数据类型、长度

方式二 根据现有的表创建

# 例:复制employees表,包括数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;

修改表

在表中 增删改查 字段

ALTER TABLE myemp2
ADD salary DOUBLE(10,2);# 默认添加在末尾(小数点前8位,后2位)
DESC myemp2;

# 修改一个字段:数据类型、长度、默认值
ALTER TABLE myemp2
MODIFY last_name VARCHAR(25) DEFAULT 'Aa';# 更改字符串长度和默认值

# 重命名一个字段
ALTER TABLE myemp2
CHANGE salary monthly_salary DOUBLE(10,2);

ALTER TABLE myemp2
CHANGE email e_number VARCHAR(50);

# 删除一个字段
ALTER TABLE myemp2
DROP COLUMN e_number;

# 重命名表
RENAME TABLE myemp2
TO myemp3;

删除表

# 删除表
DROP TABLE IF EXISTS myemp2

# 清空表
TRUNCATE TABLE employees_copy;

TRUNCATE TABLE和DELETE FROM区别

相同点:
都可以实现对表中所有数据的删除,同时保留表结构。

不同点:
TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚

查 SELECT

SELECT 字段1,字段2,... FROM 表名
  1. Windows系统中的SQL语句不区分大小写
  2. 字符串用单引号’
  • 列的别名 AS

1.(alias 别名) 可以省略
2.列(字段)的别名可以使用""引起来

SELECT employee_id ID,last_name AS,salary "工资"
FROM employees;
  • 去除重复行 DISTINCT
SELECT DISTINCT department_id 
FROM employees;
  • 空值参与运算

所有运算符或列值遇到null值,运算的结果都为null

SELECT employee_id,salary 月工资,salary * (1 + commission_pct) * 12 "年工资",commission_pct
FROM employees;

解决方案 IFNULL

SELECT employee_id,salary 月工资,salary * (1 + IFNULL(commission_pct,0)) * 12 "年工资",commission_pct
FROM employees;

注意
1.MySQL中,null不等于空字符串。一个空字符串的长度是0,而一个空值的长度是空
2.MySQL中,空值是占用空间的

  • 着重号 ``

出现名字和sql语言中的关键字重名的现象,用``处理

SELECT * FROM ORDER;# 这里order表名和ORDER关键字冲突
SELECT * FROM `order`;#正确
  • 查询常数

在 SELECT 查询结果中增加一列固定的常数列,该常数列的取值可以指定。

SELECT '西电',employee_id,last_name
FROM employees;
  • 显示表中字段详细信息 DESCRIBE / DESC
DESCRIBE employees;
DESC departments;
  • 过滤数据 WHERE
SELECT * 
FROM employees
WHERE department_id = 90;#过滤条件

排序和分页

ORDER BY

关键字 ORDER BY 默认升序

升序:ASC
降序:DESC

# 将员工信息先按照部门号一级排序,再根据工资二级排序
SELECT employee_id,department_id,salary
FROM employees
ORDER BY department_id DESC,salary ASC;

LIMIT

如果查询结果返回的记录太多,采用分页的方式,每次只返回特定页数的数据。

关键字 LIMIT
格式:LIMIT 位置偏移量, 条目数

注意:
1.位置偏移量 -1 表示真实位置
2.LIMIT子句必须放在SELECT语句的最后

# 取工资大于6000的员工按工资升序排列,数据为第三页
SELECT employee_id, last_name, salary
FROM employees
WHERE salary>6000
ORDER BY salary ASC
LIMIT 20,10;

另外*:关键字OFFSET
LIMIT 3 OFFSET 4表示获得从第五条记录开始的后面三条记录

运算符

除法 /或DIV
取余 %或MOD

1.在SQL中,字符串存在隐式转换(字符串尝试转化为数字),如果转换不成功,则为0。如0 = 'a'
2.运算中存在null时,大多数情况下结果为null(除了安全等于)

# 在SQL中,+表示加法,不区分数据类型,会将字符串转化为数值(隐式转换)
SELECT 100 + '1' # 101 Java中结果为1001,相当于字符串的连接
FROM DUAL;

比较运算符

特殊:
1.安全等于 <=> 可以判断null
2.不等于 != 或 <>

在SQL中,+表示加法,不区分数据类型,会将字符串转化为数值(隐式转换)

SELECT 100 + '1' # 101 Java中结果为1001,相当于字符串的连接
FROM DUAL;

非符号运算符

  • IS NULL\ IS NOT NULL\ ISNULL 判断空值

  • LEAST \ GREATEST 最小值\最大值

  • BETWEEN A AND B

  • IN \ NOT IN 判断离散值

  • LIKE 模糊查询(筛选)

另外:
% 代表不确定个数的字符
_ 代表一个不确定的字符
\ 转义字符

查询第四个字符是_且第五个字符是o的员工
SELECT last_name
FROM employees
WHERE last_name LIKE '___\_o%';

逻辑运算符

运算符作用
NOT 或 !
AND 或 &&
OR 或 ||
XOR异或
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值