文章目录
- 关于SQL的注意事项以及基本查询
- SQL的分类:
- SQL大小写规范:
- 导入现有的数据表和表的数据:
- 最基本的SELECT语句:
- 运算符的使用
- 算术运算符
- 比较运算符
- 逻辑运算符和位运算符
关于SQL的注意事项以及基本查询
SQL的分类:
- DDL:数据定义语言
CREATE ALTER DROP RENAME
- DML:数据操作语言
INSERT DELETE UPDATE SELECT(重中之重)
- DCL:数据控制语言
COMMIT ROLLBACK SAVEPOINT GRANT REVOKE
USE dbtest;
SELECT * FROM emp
INSERT INTO emp VALUES(1002,'TOM')
语句写分号,如果只执行一条语句可以不写,执行两条以上要写
字符串,日期时间类型的变量需要使用一对’’ -
SHOW CREATE TABLE kss_note
SQL大小写规范:
- MYSQL在windows环境下是大小写不敏感的(windows本身就对这个不敏感)
- MYSQL在Linux环境下是大小写敏感的
- 推荐使用统一规范:数据库名,表名,表别名,字段名,字段别名都小写,SQL关键字,函数名,绑定变量都大写
导入现有的数据表和表的数据:
- 方式1:source文件的全路径名
需要命令行才能执行source D:\系统默认\桌面\atguigudb.sql
- 方式2:基于具体的图形化界面的工具可以导入数据
执行sql脚本
最基本的SELECT语句:
SELECT 1+1,3*2 FROM DUAL;
dual:伪表
- 表示表中的所有的字段(或列)
SELECT * FROM employees;
列的别名:
as:全称:alias,可以省略。
列的别名可以使用一对""引起来,不要使用’‘。
SELECT employee_id emp_id,last_name AS lname,department_id "dept_id" FROM employees;
查询到的东西叫做结果集 - 去掉重复行:
SELECT DISTINCT department_id FROM employees;
- 错误的书写:
SELECT salary,DISTINCT department_id FROM employees;
整体不重复,没有实际意义:SELECT DISTINCT department_id,salary FROM employees;
- 空值:
null不等同于0,’',‘null’,空值参与运算结果也为null。
实际解决方案引入IFNULL,select salary "月工资",salary*(1+ifnull(commission_pct,0))*12 "年工资",commission_pct from employees;
- 着重号:``
如果出现了字段名,表名和关键字重名了,那么就需要着重号。
查询常数:
select 'yykk',123,employee_id,last_name from employees;
显示表结构:
显示表中字段的详细信息
describe employees;
过滤条件where:
SELECT * FROM employees WHERE last_name = 'king';
windows情况下不区分大小写
算术运算符
+ - * / div % mod
在java语言中,结果是1001.
在SQL中,+没有连接eider作用就表示加法运算,会将字符串转化为数值(隐式转化)。
select 100 +'1' from dual;
SELECT 100 +'a' FROM DUAL;
将’a’当作0来处理
SELECT 100 +NULL FROM DUAL;
SELECT 100/2,100/3,100 DIV 0 FROM DUAL;
除以就默认是浮点型,分母如果为0结果为null
SELECT 100 DIV 2,100 DIV 3 FROM DUAL;
取模运算: % mod
SELECT 12%3,12%5,12 MOD -5,-12 MOD 5,-12 % 5,-12 % -5 FROM DUAL;
结果的正负号只于被模数有关。比如-12
比较运算符
= <=> <> != < <= > >=
select 1=2,1!=2,1='1',1='a',0='a' from dual;
'a’转化数值不成功,隐式转化为0
SELECT 'a' = 'b','a' = 'a' FROM DUAL;
两边都是字符串,按照ASCII的比较规则进行比较
只要有null参与判断结果就为null。
安全等于 <=>,和=的唯一区别就是可以用NULL进行判断。
select 1 <=> null,null <=> null from dual;
IS NULL
等价于<=> NULL
IS NOT NULL
就是不为空的情况下
select least('g','a'),greatest('a','b') from dual;
LEAST GRTEAST
SELECT LEAST(first_name,last_name) FROM employees;
并不是比较字符串长度,而是逐个比较字符大小直到比较出结果
SELECT LEAST(LENGTH(first_name),LENGTH(last_name)) FROM employees;
BETWEEN …条件1 AND …条件2
条件1和条件2不能交换
SELECT employee_id,salary FROM employees WHERE salary BETWEEN 6000 AND 8000;
不在6000到8000之内
SELECT employee_id,salary FROM employees WHERE salary NOT BETWEEN 6000 AND 8000;
in not in
select last_name,salary,department_id from employees where department_id in(10,20,30);
相反not in表示不在括号内离散的数字的情况。
模糊查询 LIKE:
SELECT last_name FROM employees WHERE last_name LIKE '%a%';
_ :代笔一个不确定的字符
SELECT last_name FROM employees WHERE last_name LIKE '_a%';
使用转义字符
逻辑运算符和位运算符
XOR :追求的“异”字,两边一真一假就要
select last_name,salary,department_id from employees where department_id = 50 XOR SALARY >6000;
注意AND优先级高于OR
位运算符: & | ^ ~ >> <<