“全部的问题”在上一篇中已经写过一点了。
“仅仅”
:这个问题可以使用多表连接来处理。例如:查询仅仅选修了课程A和课程B的学生的信息,sql如下:
其中表student定义了学生的信息。transcript定义了学生的选课情况。crscode字段表示课程代码。
select s.id
from student s,transcript t1,transcript t2
where s.id = t1.studid and t1.studid = t2.studid
and t1.crscode = 'cs305' and t2.crscode = 'mgt123'
这里是三个表的连接。
“至少”:至少的问题,如果
至少的内容是预先知道的,如:查询至少选修了课程A和B的学生,这样也是可以使用多表连接的。
sql如下:
select t1.studid
from transcript t1,transcript t2,student s
where t1.crscode = 'cs305' and t2.crscode = 'cs315' and s.id = t1.studid and t1.studid = t2.studid
但是如果
至少的内容事先是不知道的,就不能用多表连接了。如:查询至少选修了学生S选修的课程的学生。就是说学生S选修了一些课程,
查查看哪些学生的选课中包含
这些课程的。很显然sql中没有”包含“这样的谓词。但是可以将这个需求转换为其他的描述方式:
不存在这样的课 ......
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
SELECT SUM(population) from bbc
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。
SQL实例:
一、显示每个地区的总人口数和总面积:
SELECT region, SUM(population), SUM(area)
from bbc
GROUP BY region
先以region把返回记录分成多个组,这就是GROUP BY的字面含义。 ......
闲来写下with cube的用法
cube运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。
先看下表:
我们以id聚合查询出平均分
这一条SQL语句与上面唯一不同之处即为多了后面的 with cube,而结果却是比前面更多了一条结果,它同样是按类ID的平均分,不同是又多了最后一个结果null 4,这个是什么呢,我们来看第一段,with cube 是 包含所有可能的组合,我们根据ID分,它帮我们按ID查出平均总,同时再帮我们计算出所有的平均分,即该表ID为1与2 的平均分。这个我们可以在很多地方应用,如按性别统计工资,按部门统计业绩……
其实实际中,我们往往就得到更准确的数据,即~上面结果应该以小数形式为好~其实上面结果也是不准确的,SQL将其四舍五入了~
我们式式办法~
我们发现有了,有了小数,但再细心一看,结果是不对的,这样SQL相当于就将前一步的操作结果转换成小数,直接在4后面加了二个0,这显示不对,那么SQL为什么会这样,我们又如何解决,其实在表voteDetails中,我们的v ......
启用c2审核命令如下:
EXEC sp_configure 'c2 audit mode', '1' RECONFIGURE
SQL Server以128KB大小的块为单位把数据写入跟踪文件。因此,当SQL Server非正常停止时,最多可能丢失128
KB的日志数据。可以想象,包含审核信息的日志文件将以很快的速度增大。例如,某次试验只访问了三个表,跟踪文件已经超过了1MB。当跟踪文件超过
200MB时,C2审核将关闭旧文件并创建新文件。每次SQL Server启动的时候,它会创建一个新的跟踪文件。如果磁盘空间不足,SQL
Server将停止运行,直至我们为审核日志释放出足够的磁盘空间并重新启动SQL Server实例。在SQL
Server启动的时候,可以使用-f参数禁用审核。
......
Linux版本: Red Hat Enterprise Linux 5
Nginx版本: nginx 0.8.34
PHP版本: php 5.2.13
MySQL版本:5.0.22
php所需支持库:libiconv、libmcrypt、mhash、mcrypt
1、编译安装php所需支持库
# tar zxvf libiconv-1.13.tar.gz
# cd libiconv-1.13/
# ./configure --prefix=/usr/local
# make && make install
# cd ../
# tar zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8/
# ./configure
# make && make install
# /sbin/ldconfig
# cd libltdl/
# ./configure --enable-ltdl-install
# make && make install
# cd ../../
# tar zxvf mhash-0.9.9.9.tar.gz
# cd mhash-0.9.9.9/
# ./configure
# make && make install
# cd ../
# ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
# ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
# ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
# ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
# ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
# ln -s /usr/local/lib/libmh ......
连接到数据库之后,即可在数据库中创建所需要的表。在数据库中创建表,可以通过是用PHP的MSSQL库函数中的mssql_query()函数执行相应的建表SQL语句来实现。函数mssql_query()是专门用于执行SQL语句的函数,该函数代码格式:
mixed mssql_query(string query[,resource link_identifier[,int batch_size]])
该函数参数意义:
a. 参数query为指定需要被执行的SQL语句。
b. 参数link_identifier为指定函数mssql_connect()打开SQL Server的连接标识。如果省略该参数,系统将会自动调用最后一次打开SQL Server服务器的连接。
该函数如果成功运行,则相应的SQL语句将会被执行;如果返回的结果为0 则返回true;如果执行过程中出现错误则返回false。
如何通过mssql_query()执行在库中创建表的SQL语句,实现建表操作。
<?php
$hostname="datahost";
$dbuser="sa";
$dbpasswd="123";
$dbname="tempdb";//定义数据库名
$conn=mssql_connect($hostname,$dbuser,$dbpasswd);
mssql_select_db($dbname);//选择数据库
$t_name="my_table";//定义表名
$c_t="create table $t_name (id int not null primary key, name char(12) not null)";
$result=mssql_query($c_t, ......