查询,表达式,总计函数 USE sqlstudy GO /**//*先进行分组再进行聚合函数的计算*/ SELECT last_name, trainer, COUNT(*) AS num_trainers, SUM(sales_amt) AS gross_sales, AVG(sales_amt) FROM employees, sales WHERE sales >0AND emp_id = sold_by GROUPBY last_name, trainer HAVINGAVG(sales_amt) >6000 /**//*不能将AS 后的名字用在group by 中,但是可以用在order by 中 如upSale*/ SELECT emp_id, sales, cust_id, sale升值后 ='升值后=', 'ckcs', (sales_amt *10) AS upSale, (sales_amt -10*0.5) AS testSale FROM sales, employees GROUPBY emp_id, sales, cust_id, sales_amt ORDERBY emp_id DESC, upSale SELECT emp_id FROM employees WHERE (emp_id<5ANDNOT emp_id ='2') OR last_name ='Green'/**//* not <> != */ SELECT emp_id, last_name, trainer, (sales *10) FROM employees ORDERBY1ASC, 3DESC, 4DESC/**//*当某列不在表中的列(无名)的列*/ /**//*ORDER BY emp_id ASC, trainer DESC*/ USE sqlstudy GO SELECT last_name, CASE emp_id WHEN1THEN'good' WHEN2THEN'so good' WHEN3THEN'bad' ENDAS'check' FROM employees WHERE sales >0 SELECT last_name, CASEWHEN sales =2THEN'good' WHEN emp_id = (SELECT emp_id FROM employees WHERE emp_id =4) THEN'bad' WHEN trainer ='Greg'THEN'so good' ENDAS'check sales' FROM employees WHERE emp_id <>5 USE sqlstudy GO UPDATE employees SET sales =CASEWHEN emp_id =1THEN sales *1.5 WHEN emp_id =2THEN sales *2.5 WHEN emp_id =3THEN sales *3.5 WHEN emp_id =4THEN sales *4.5 ELSE sales *5.5 END WHERE emp_id <>5 SELECT trainer, CASEWHEN sales <>0THEN100/sales ELSE'0' ENDAS'test sales' FROM employees SELECT trainer, CASEWHEN sales >20THEN sales -20 ELSE'20' ENDAS'test sales' FROM employ USE sqlstudy Go /**//*nullif 在sales的值为6时返回null,否则返回sales的原值*/ SELECT last_name ,NULLIF(sales, 6) AS'test sales' FROM employees /**//*isnull 在sales的值为null是返回6,否则返回sales的原值*/ SELECT last_name ,ISNULL(sales, 6) AS'test sales' FROM employees USE sqlstudy GO--coalesce(a, b, c, ..。)返回第一个不为null的值,当全为null的时候返回null值。 SELECT last_name, coalesce(sales, (SELECTMIN(sales) FROM employees), 0) AS'test sales' FROM employees WHERE emp_id <>4 ALTERTABLE employees ADD first_name char(10) ALTERTABLE employees DROPCOLUMN total_emp UPDATE employees SET total_emp = (SELECTCOUNT(DISTINCT sales) FROM employees) /**//*distinct 不可以和* 一起连用*/ SELECTCOUNT('1') FROM employees SELECTCOUNT(first_name), COUNT(last_name), COUNT(DISTINCT (first_name + last_name)) FROM employees USE sqlstudy GO SELECT emp_id, trainer, SUM(sales) AS'totalsales' FROM employees GROUPBY emp_id, trainer WITH ROLLUP ORDERBY emp_id SELECT emp_id, trainer, SUM(sales) AS'totalsales' FROM employees GROUPBY emp_id, trainer WITH CUBE ORDERBY emp_id SELECTSUM(sales), SUM(DISTINCT sales) FROM employees SELECTAVG(sales) AS'testsales', AVG(DISTINCT sales) AS'unique testsales' FROM employees WHERE emp_id <>'10' SELECT sales, COUNT(*) FROM employees GROUPBY sales USE sqlstudy GO SELECT last_name FROM employees WHERE sales ISNULL/**//*不能通过比较运算符找到null值*/ SELECT last_name FROM employees WHERE sales = (SELECT sales FROM employees WHERE last_name ='ckcs') SELECT last_name FROM employees WHERE sales <= (.5*4) SELECT last_name FROM employees WHERE sales BETWEEN0AND2/**//*等价于sales >=0 AND sales <=2*/ ///多表查询创建sql视图 USE sqlstudy GO CREATEVIEW vw_employee_salary /**//*纵向的视图*/ (employee_id, employee_salary) /**//*给view中的列去个别名*/ AS SELECT id, salary FROM employee CREATEVIEW vw_employee_choose_name /**//*横向的视图*/ AS SELECT* FROM employee WHERE age=25 CREATEVIEW vw_choose_name_salary AS SELECT id, name, salary FROM employee WHERE age <>25 CREATEVIEW vw_employee_name_sold_id AS SELECT name, cust_id FROM employee, sales WHERE employee.id = sales.cust_id USE sqlstudy GO CREATEVIEW vw_sales_employee AS SELECT cust_id, salary, name FROM employee, sales UPDATE vw_sales_employee SET name ='text' WHERE cust_id ='2'/**//*会将employee中的所有行都改变???/*/ USE sqlstudy GO CREATEVIEW vw_no_check AS SELECT id, name, salary, department FROM employee WHERE department ='temp' INSERTINTO vw_no_check /**//*通过view向基表插入行*/ VALUES(101, 'JINLP', 563) UPDATE vw_no_check SET department='daxue' WHERE id ='88' CREATEVIEW vw_test_check AS SELECT id, name, salary, department FROM employee WHERE department ='temp' WITHCHECKOPTION INSERTINTO vw_test_check VALUES(111, 'JINLP', 563, 'temp') /**//*在check的约束下只能department = 'temp'下进行插入*/ UPDATE vw_test_check SET department='daxie' WHERE id ='111'/**//*在check的约束下不能改变department de 'temp'值下进行插入*/ SELECT cust_id, avg(sales_amp) FROM sales WHERE cust_id ='1' GROUPBY cust_id USE sqlstudy GO INSERTINTO employee_3 SELECT*FROM employee_1 SELECT*FROM employee_1 UNION SELECT*FROM employee_2 /**//*消除重复的行(MSSqlserver 以第一个表的列作为列名)*/ SELECT*FROM employee_1 UNIONALL SELECT*FROM employee_2 ORDERBY salary (ORDERBY3:"3为结果表中的第3列") SELECT'ckcs'AS'ckcs' ,id ,name FROM employee_1 UNION SELECT name + emp_id ,emp_id ,name FROM employee_2 SELECT*FROM employee_1 /**//*使用挂号来告诉系统执行的顺序*/ UNION (SELECT*FROM employee_2 UNIONALL SELECT*FROM employee_3) CREATETABLE use_mul_unique /**//*多列的unique约束*/ ( employee_id int, office char(20), emp_name char(10), SSAN char(30) UNIQUE, CONSTRAINT unique_by_test UNIQUE(employee_id, office) )
////////////////////////////////////查询,表达式,总计函数USE sqlstudyGO/**//*先进行分组再进行聚合函数的计算*/ SELECT last_name, trainer, COUNT(*) AS num_trainers, SUM(sales_amt) AS gross_sales, AVG(sales_amt) FROM employ