SQL第一天

1、环境安装与配置

2、常用语句测试

登录方式1MySQL自带客户端

         开始菜单 → 所有程序 → MySQL MySQL 8.0 Command Line Client  (仅限于root用户
        输入密码登录
    登录方式 2 windows 命令行   
        命令: mysql -h 主机名 -P 端口号 -u 用户名 -p 密码
        
             (1) -p 与密码之间不能有空格,其他参数名与参数值之间可以有空格也可以没有空格。
        
             (2)密码建议在下一行输入,保证安全
                        如: mysql -h localhost -P 3306 -u root -p
                                Enter password:****
                
            (3)客户端和服务器在同一台机器上,所以输入localhost 或者 IP 地址 127.0.0.1
                        同时,因为是连接本机: -hlocalhost就可以省略,如果端口号没有修改:
                         -P3306也可以省略为:
                        mysql -u root -p
                        Enter password:****
        ②命令行窗口下可以查看MYSQL Server服务版本的信息,输入:c:\> mysql --version 或者 mysql -V     或者登录后输入: select version();查看当前版本信息。
        ③退出登录:
                                exit
                                或
                                quit

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值