1、环境安装与配置
略
2、常用语句测试
①登录方式1:MySQL自带客户端
3、SQL可视话界面
# SQL 日记1
/*
1,SQL环境的安装与配置
2,基础语句测试
*/
# SQL 规范:不同的厂商(MYSQL与Oracle)都支持,但各厂商都有其特有的部分
#即:常用的操作都一样;
# SQL分类:DDL、DML、DCL
/*
DDL:数据定义语言。
这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
例:CREATE、ALTER、DROP、RENAME、TRUNCATE
DML:数据操作语言。
用于添加、删除、更新和查询数据库记录,并检查数据完整性。
例:INSERT、DELETE、UPDATE、SELECT
DCL:数据控制语言。
用于定义数据库、表、字段、用户的访问权限和安全级别。
例:COMMIT、ROLLBACK、SAVEPINT
*/
#SQL语言的规则与规范
/*
SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令以 ; 或 \g 或 \G 结束
关键字不能被缩写也不能分行
关于标点符号
必须保证所有的()、单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(' ')表示
列的别名,尽量使用双引号(" "),而且不建议省略as
SQL大小写规范:
MySQL 在 Windows 环境下是大小写不敏感的
MySQL 在 Linux 环境下是大小写敏感的
数据库名、表名、表的别名、变量名是严格区分大小写的
关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
推荐采用统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写
SQL 关键字、函数名、绑定变量等都大写
命名规则(暂时了解)
数据库、表名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
数据库名、表名、字段名等对象名中间不要包含空格
同一个MySQL软件中,数据库不能同名;
同一个库中,表不能重名;同一个表中,字段不能重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据
类型在一个表里是整数,那在另一个表里可就别变成字符型了
*/
# SQl单行注释
-- 单行注释 --
/*
多行注释
*/
# 导入数据:命令行执行语句:source d:\mysqldb.sql(文件路径)
# 图形化界面:SQLyog中--工具-执行SQL脚本
#基本的SELECT语句:
/*
*/
SELECT 1+1,3+2 FROM DUAL; #DUAL 伪表
SELECT * FROM employees; # * 返回表中所有的字段(列)
SELECT employee_id,last_name,salary FROM employees; # 差寻具体的字段
SELECT employee_id 工号,last_name "名",salary AS 工资 FROM employees; # 列的别名:列 别名,列 AS 别名,列 “别名”(双引号框起来)
#去除重复
#错误语句
SELECT salary ,DISTINCT department_id
FROM employees;
SELECT DISTINCT salary, department_id
FROM employees;
SELECT DISTINCT department_id, salary
FROM employees;
SELECT DISTINCT department_id
FROM employees;
#空值null参与运算,空值参与运算结果为空"null"
#null不等于0,'','null'
SELECT * FROM employees;
SELECT employee_id ID,salary "月工资",salary*(1+commission_pct)*12 "年工资"
FROM employees;
#解决方法,引入IFNULL判断
SELECT employee_id ID,salary "月工资",salary*(1+IFNULL(commission_pct,0))*12 "年工资"
FROM employees;
#着重号 `` 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
SELECT * FROM `order`;
#查询常数,常数会加在每一行
SELECT '李超', 123,employee_id,last_name
FROM employees;
#显示表结构
DESCRIBE employees; #显示表中字段的详细信息
DESC employees; #同
#过滤数据 WHERE 条件;WHERE必须挨着FROM下面
SELECT *
FROM employees
WHERE department_id = 90;
SELECT *
FROM employees
WHERE last_name = 'King'; # SQL语句不严谨,King不区分大小写
# 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
SELECT employee_id AS ID,salary*(1+IFNULL(commission_pct,0))*12 AS "ANNUAL SALARY "
FROM employees;
# 2.查询employees表中去除重复的job_id以后的数据
SELECT DISTINCT job_id
FROM employees;
# 3.查询工资大于12000的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary >= 12000;
# 4.查询员工号为176的员工的姓名和部门号
SELECT last_name
FROM employees
WHERE employee_id = 176;
# 5.显示表 departments 的结构,并查询其中的全部数据
DESC departments;
SELECT *
FROM departments;
-- 运算符 --
#1.算数运算符:加(+)、减(-)、乘(*)、除(/)和取模(%)运算。
SELECT 100,100+0,100+50*30
FROM DUAL
#SQL中,+没有连接作用,就表示加法运算。此处会将字符串转化为数值型(隐式转换)
SELECT 100 + '1',100 + 'a' #'a'会看为0处理
FROM DUAL;
#比较运算符: = 等于,<=>安全等于
SELECT 1 = 2,1 != 2, 1 = '1', 1 = 'a', 0 = 'a'
FROM DUAL;
SELECT 'a' = 'a', 'ab' = 'ab', 'a' = 'b' #字符串比较按照ANSI比较规则
FROM DUAL;
SELECT 1 = NULL,NULL = NULL #null运算都为null
FROM DUAL;
-- 错误写法 --
SELECT last_name, salary
FROM employees
WHERE commissiom_pct = NULL; #条件判断为null,不会返回结果
# <=> :为null而生
SELECT last_name, salary,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
#<>(!=),<,<=,>,>=
# IS NULL
SELECT last_name, salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
# IS NOT NULL
SELECT last_name, salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
#ISNULL
SELECT last_name, salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
#或
SELECT last_name, salary,commission_pct
FROM employees
WHERE NOT ISNULL(commission_pct);
#LEAST()最小值返回\GREATEST最大值返回
SELECT LEAST('g','c','a','b','f','z'),GREATEST('a','b','c','d','z')
FROM DUAL;
SELECT LEAST(first_name,last_name),LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
#BETWEEN ... AND
SELECT employee_id,last_name,salary
FROM employees
#where salary between 6000 and 8000;
WHERE salary >=6000 && salary <=8000;
#IN(set) \ NOT IN(set)
SELECT last_name,salary,department_id
FROM employees
#where department_id = 10 or department_id = 20 or department_id = 30;
WHERE department_id IN (10,20,30);
#like : 模糊查询
#查询last_name 中包含‘a'的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '%a%'; # '%':代表不确定个数的字符,包括零个
SELECT *
FROM employees
#WHERE last_name LIKE '%a%e%' or last_name like '%e%a%';
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
# "_" :代表一个不确定的字符
# 查询第二个字母为a的信息
# 转义字符:‘\'
SELECT *
FROM employees
WHERE last_name LIKE '_a%';
# 正则表达式:REGEXP \ RLIKE
# 逻辑运算符
# 位运算符
# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name,salary
FROM employees
WHERE NOT salary >=5000 AND salary <=12000;
# 2.选择在20或50号部门工作的员工姓名和部门号
SELECT last_name,department_id
FROM employees
WHERE department_id IN (20,50);
# 3.选择公司中没有管理者的员工姓名及job_id
SELECT last_name,job_id
FROM employees
WHERE manager_id IS NULL;
# 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
# 5.选择员工姓名的第三个字母是a的员工姓名
SELECT *
FROM employees
WHERE last_name LIKE '__a%';
# 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT *
FROM employees
WHERE first_name LIKE '%e';
SELECT *
FROM employees
WHERE first_name REGEXP 'e$';
# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT last_name,job_id
FROM employees
#where department_id >=80 and department_id <=100;
WHERE department_id BETWEEN 80 AND 100;
# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT last_name,salary,manager_id
FROM employees
WHERE manager_id IN (100,101,110);