sql语句的学习

104 阅读6分钟

基本的SELECT语句

-- # 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY

SELECT employee_id,last_name ,salary*12 "ANNUAL SALARY"
FROM employees;

-- # IFNULL(expr1,expr2) :假如expr1不为NULL,则 IFNULL() 的返回值为expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

SELECT employee_id,last_name,salary*12*(1+IFNULL(commission_pct,0)) "股东年薪"
FROM employees;

-- # 2.查询employees表中去除重复的job_id以后的数据,DISTINCT:不同的

SELECT DISTINCT job_id
FROM employees;

-- # 3.查询工资大于12000的员工姓名和工资

SELECT last_name,salary
FROM employees
WHERE salary>12000;

-- # 4.查询员工号为176的员工的姓名和部门号

SELECT last_name,department_id
FROM employees
WHERE employee_id = 176;

-- # 5.显示表 departments 的结构,并查询其中的全部数据,DESC+表名显示表结构

DESC departments;
SELECT * FROM departments;

运算符

-- 1.选择工资不在5000到12000的员工的姓名和工资

SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;

-- 2.选择在20或50号部门工作的员工姓名和部门号

SELECT last_name , department_id
FROM employees
WHERE department_id =20 OR department_id =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 last_name
FROM employees
WHERE last_name LIKE "__a%";

-- # 6.选择姓名中有字母a和k的员工姓名

SELECT last_name
FROM employees
WHERE last_name LIKE "%a%k%" OR last_name LIKE "%k%a%";

-- # 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息 ,REGEXP 使用转义符

SELECT last_name
FROM employees
WHERE last_name LIKE "%e";
SELECT employee_id,first_name,last_name
FROM employees
WHERE first_name REGEXP 'e$';

-- # 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种

SELECT last_name,job_id
FROM employees
-- #where department_id in (80,90,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);

排序与分页

-- #1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示:DESC降序,ASC升序

SELECT last_name,department_id,salary
FROM employees
ORDER BY salary DESC,last_name ASC;

-- #2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据

/*
LIMIT [位置偏移量,] 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移
量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是
1,以此类推);第二个参数“行数”指示返回的记录条数。
*/
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20,20;

-- #3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序

SELECT last_name,email,department_id
FROM employees
WHERE email LIKE "%e%"
ORDER BY LENGTH(email) DESC,department_id ASC;

多表查询

4b1729e5d2d1faddca1585f6633c530f.png

阿里开发规范:超过三张表,禁止join

常用

创建数据库

CREATE DATABASE database-name

删除数据库

drop database dbname

查询所有数据表

show tables;

查询表的字段信息

desc 表名称;

添加表字段

alter table table1 add transactor varchar(10) not Null;
alter table table1 add id int unsigned not Null auto_increment primary key

如果要删除某一字段,可用命令:

ALTER TABLE 表名称 DROP 字段名;

创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

删除新表

drop table tabname

增加一个列

Alter table 表名 add column 列名 类型

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

删除列:

alter table 表名 drop column 列名;

//SQL与Mysql添加删除列区别,以下为SQL操作 //ALTER TABLE 表名 ADD 字段名 //ALTER TABLE 表名 DROP COLUMN 字段名

添加主键:

Alter table tabname add primary key(col)

删除主键:

Alter table tabname drop primary key(col)

创建索引:

create [unique] index idxname on tabname(col….)

删除索引:

drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

创建视图:

create view viewname as select statement

修改列名

alter table table_name change  column address address1 varchar(30)

几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

使用limit分页:selete * from user limit startIndex,pagesize;

使用外连接 A、left (outer) join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right (outer) join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

分组Group by:

一张表,一旦分组完成后,查询后只能得到组相关的信息。

组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)

在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据

在selecte统计函数中的字段,不能和普通的字段放在一起;

如何修改数据库的名称: sp_renamedb 'old_name', 'new_name'

数据开发-经典

1.按姓氏笔画排序:

Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as #从少到多

记录

---按IP统计连接数---250 select client_addr,count(*) from pg_stat_activity GROUP BY client_addr;

---统计数据库所有连接数---500 select count(1) from pg_stat_activity;